C# 在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

我正在从事一个项目,该项目涉及使用数组将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);
        }

    }
}

谢谢你的建议和指导

找到最小/最大值非常容易。假设一个数组或列表,您只需对其调用
.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发布几行内容,那将非常有帮助。非常感谢,这确实帮助了我。