在多维结构数组中查找最小值和最大值

时间:2015-10-31 13:43:41

标签: c# max visual-studio-2015 minimum

对于学习c#的学校项目,我正在制作一个数据收集控制台应用程序,它可以保存4个不同位置的浮点条目以及时间/日期和记录条目的用户。我需要使用多维结构数组。

我需要有一个显示值的平均值的视图,以及最小值和最大值以及第一个和最后一个日期。我通过计算数值并累加数量来计算出平均数,但我无法弄清楚如何找到最小值和最大值。

我尝试搜索并看到此页面:http://www.dotnetperls.com/max 我试图在我的代码中实现这种语法无济于事,因为它是一个更复杂的数组。

它在我的测试中使用整数:

class Program
{
    static int[][] intarray = new int[4][] { new int[10], new int[10], new int[10], new int[10] };
    static void Main(string[] args)
    {
        intarray[0][0] = 5;
        intarray[0][1] = 3;
        intarray[0][2] = 10;
        intarray[0][3] = 4;
        intarray[0][4] = 2;
        Console.WriteLine(intarray[0].Max());
        Console.ReadLine();
    }
}

以上代码完美显示数字10! :)

但是当我尝试使用struct array在我的程序中实现它时,它不起作用:

class Program
{
    static byte location = 0;
    static float entriesmin;
    static float entriesmax;
    static Entry[][] entriesarray = new Entry[4][] { new Entry[10], new Entry[10], new Entry[10], new Entry[10] };

    struct Entry
    {
        public float value;
        public string user;
        public DateTime datetime;
    }

    static byte LoopEntries(bool display)
    {
        float runningtotal = 0;
        byte entrycount = 0;
        foreach (Entry entry in entriesarray[0])
        {
            if (entry.user != null)
            {
                if (display)
                {
                    string ten;
                    if (entrycount == 9)
                    {
                        ten = "  #";
                    }
                    else
                    {
                        ten = "   #";
                    }
                    Console.WriteLine(ten + (entrycount + 1) + " " + entry.datetime + " " + entry.user + new string(' ', 16 - entry.user.Length) + entry.value);
                }
                runningtotal += entry.value;
                entrycount += 1;                
            }
        }
        entriesmin = (entriesarray[location]).value.Min();
        entriesmax = (entriesarray[location]).value.Max();            
        if (entrycount == 0 && display)
        {
            Console.WriteLine("No entries to show!");                
        }
        return entrycount;
    }

我需要在星期一交付这个项目!我真的希望有人可以帮助我! ;)

1 个答案:

答案 0 :(得分:1)

你所拥有的不是一个多维数组,它是一个数组数组(a.k.a.一个锯齿状数组),但你以类似的方式使用它们。

要遍历数组数组,需要在循环中循环:

foreach (Entry[] arr in entriesarray) {
  foreach (Entry entry in arr) {
    // ...
  }
}

您可以使用MinMax扩展方法来获取每个内部数组的最小值和最大值,但您仍然必须找到这些值之间的最小值和最大值。由于您已经遍历所有条目以获得平均值,因此您可以保留最小值和最大值的记录:

float runningtotal = 0;
int entrycount = 0;
float min = float.MaxValue;
float max = float.MinValue;
foreach (Entry[] arr in entriesarray) {
  foreach (Entry entry in arr) {
    runningtotal += entry.value;
    entrycount++;
    if (entry.value < min) {
      min = entry.value;
    }
    if (entry.value > max) {
      max = entry.value;
    }
  }
}