C# 在C中从数组中查找最小值和最大值#
我正在从事一个项目,该项目涉及使用数组将CSV文件中的数据导入C#程序,并返回最小值和最大值等值。我在实现返回最大值和最小值的方法时遇到了一些问题 样本类别:C# 在C中从数组中查找最小值和最大值#,c#,arrays,C#,Arrays,我正在从事一个项目,该项目涉及使用数组将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 { cl
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);
}
}
}
谢谢你的建议和指导 找到最小/最大值非常容易。假设一个数组或列表,您只需对其调用
.Min()
或.Max()
。例如:
var foo = new List<int> {4,3,5,9,1};
var min = foo.Min();
var max = foo.Max();
var foo=新列表{4,3,5,9,1};
var min=foo.min();
var max=foo.max();
我认为为我在评论中看到的一些答案提供一些代码可能会有用
要阅读所有行,您可以执行以下操作:
using (StreamReader reader = new StreamReader("examdata.csv")) {
while ((buffer = reader.ReadLine()) != null)
{
// Something
}
}
然后,如果您使用的是数组,您可以像@gilliduck所说的那样,使用.min()
或.max()
在示例
类中使用重载方法构建ReadCsv()
方法,如下所示:
public static Samples ReadCsv(StreamReader reader)
{
return ReadCSv(reader.ReadLine());
}
public static Samples ReadCsv(string line)
{
parts = line.Split(',');
return new Samples() {
Fenner = Convert.ToDouble(parts[0]),
Abom = Convert.ToDouble(parts[1])
};
}
static void Main(string[] args)
{
var samples = File.ReadLines("examdata.csv")
.Select(l => Samples.ReadCsv(l))
.ToList();
double totalFenner = samples.Select(s => s.Fenner).Sum();
double totalAbom = samples.Select(s => s.Abom).Sum();
double total = totalFenner + totalAbom;
double meanFenner = sampes.Select(s => s.Fenner).Avg();
double meanAbom = samples.Select(s => s.Abom).Avg();
double meanTotal = samples.Select(s => s.Fenner + s.Abom).Avg();
Console.WriteLine(meanFenner);
Console.WriteLine(meanAbom);
Console.WriteLine(meanTotal);
Pause();
}
然后您可以从Main()
方法使用它,如下所示:
public static Samples ReadCsv(StreamReader reader)
{
return ReadCSv(reader.ReadLine());
}
public static Samples ReadCsv(string line)
{
parts = line.Split(',');
return new Samples() {
Fenner = Convert.ToDouble(parts[0]),
Abom = Convert.ToDouble(parts[1])
};
}
static void Main(string[] args)
{
var samples = File.ReadLines("examdata.csv")
.Select(l => Samples.ReadCsv(l))
.ToList();
double totalFenner = samples.Select(s => s.Fenner).Sum();
double totalAbom = samples.Select(s => s.Abom).Sum();
double total = totalFenner + totalAbom;
double meanFenner = sampes.Select(s => s.Fenner).Avg();
double meanAbom = samples.Select(s => s.Abom).Avg();
double meanTotal = samples.Select(s => s.Fenner + s.Abom).Avg();
Console.WriteLine(meanFenner);
Console.WriteLine(meanAbom);
Console.WriteLine(meanTotal);
Pause();
}
或者像这样(更多代码,但对某些人来说运行更快、更容易理解):
将所有项读取到集合中,并使用System.Linq命名空间和Min()Max()方法。看起来您只读取csv文件中的一行。您需要读取所有行。string.Split()是处理csv值的糟糕方法。您有一个包含两个值的数组。部分[0]是数组的第一个值,而不是数组,这就是为什么您不能调用部分[0]。Min()如果您从examdata.csv发布几行内容,那将非常有帮助。非常感谢,这确实帮助了我。