这个问题在这里已有答案:
我正在开发一个项目,该项目涉及使用数组将CSV文件中的数据导入C#程序并返回最小值和最大值等值 . 我在实现返回最大值和最小值的方法时遇到了一些麻烦 .
样品类:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thomas_Nicholas_E2
{
class Samples
{
public double Fenner { get; set; }
public double Abom { get; set; }
public Samples()
{
}
public void ReadCsv(StreamReader reader)
{
string buffer;
string[] parts;
// Get record from file
buffer = reader.ReadLine();
// Break record into components
parts = buffer.Split(',');
/* Array.Sort<string>(parts);
foreach (var x in parts)
{
Console.WriteLine(x);
}
*/
// Convert field values to variable
Fenner = Convert.ToDouble(parts[0]);
Abom = Convert.ToDouble(parts[1]);
// Finding the range of the datasets
//var sortedFenner = parts[0].OrderBy(i => i);
//var sortedAbom = parts[1].OrderBy(i => i);
//var sortedTotal = parts.OrderBy(i => i);
//Console.WriteLine(sortedAbom);
//Console.WriteLine(parts.Max());
//double minimum1 = Math.Min(parts, parts);
//Console.WriteLine(parts[1].Min());
//string min = parts[0].Min();
// Console.WriteLine(min);
//double min = parts[1].Min();
//Console.WriteLine(min);
}
}
}
你可以在Samples类底部的注释部分看到我到目前为止所尝试的内容 .
程序类以防万一:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thomas_Nicholas_E2
{
class Program
{
static void Main(string[] args)
{
StreamReader reader = new StreamReader("examdata.csv");
string buffer;
double totalFenner = 0.0;
double totalAbom = 0.0;
double total = 0.0;
double minumum = 0.0;
double maximum = 0.0;
double range = 0.0;
double meanFenner = 0.0;
double meanAbom = 0.0;
double meanTotal = 0.0;
// Read header to get it out of the way
buffer = reader.ReadLine();
while(!reader.EndOfStream)
{
Samples MySamples = new Samples();
MySamples.ReadCsv(reader);
// Processing
//Calculating totals
totalFenner += MySamples.Fenner;
totalAbom += MySamples.Abom;
total = (totalFenner + totalAbom);
//Calculating means
meanFenner = (totalFenner / 20);
meanAbom = (totalAbom / 20);
meanTotal = (total / 40);
// += MySamples;
//Console.WriteLine("TransId: {0} DeptNo: {1} Amt: {2}", transId, deptNo, amt);
//MyTransaction.Print();
}
Console.WriteLine(meanFenner);
Console.WriteLine(meanAbom);
Console.WriteLine(meanTotal);
//Console.WriteLine(Samples.sortedAbom)
reader.Close();
Pause();
}
private static void Pause()
{
Console.Write("Press any key to continue...");
Console.ReadKey();
}
}
}
我感谢任何建议或指导,谢谢 .
3 回答
找到最小值/最大值非常简单 . 假设一个数组或列表,你可以简单地调用
.Min()
或.Max()
. 例如:使用重载的Factory pattern方法在
Samples
类中构建ReadCsv()
方法,如下所示:然后您可以使用
Main()
方法使用它,如下所示:或者像这样(更多代码,但运行更快,更容易让一些人理解):
我认为为评论中看到的一些答案提供一些代码可能会有用 .
要阅读所有行,您可以执行以下操作:
然后,如果你正在使用数组,你可以像@gilliduck所说的那样做,并用
.Min()
或.Max()
找到最小/最大值 .