Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C如何从列表列表中获取最大值_C#_.net_Arrays_Linq_List - Fatal编程技术网

C# C如何从列表列表中获取最大值

C# C如何从列表列表中获取最大值,c#,.net,arrays,linq,list,C#,.net,Arrays,Linq,List,我有一个由制表符分隔的字符串创建的列表列表。我使用列表代替二维数组,因为我不知道创建数组的大小 大概是 0 0 16.0000 0 15.0000 15.0000 0 15.0000 2.7217 5.6904 3.7217 5.6904 现在我想从每一列中找出最大值和最小值。 所以如果你拿上面的例子来说 最大值为:16.0000 15.0000 最小值为:0 for (int

我有一个由制表符分隔的字符串创建的列表列表。我使用列表代替二维数组,因为我不知道创建数组的大小

大概是

         0         0
   16.0000         0
   15.0000   15.0000
         0   15.0000
    2.7217    5.6904
    3.7217    5.6904
现在我想从每一列中找出最大值和最小值。 所以如果你拿上面的例子来说

最大值为:16.0000 15.0000 最小值为:0

for (int i = 0; i < size[0]; i++)
{
  // Create size[0] x size[1] array
  obstVertex.Add(new List<double>());
  for (int y = 0; y < size[1]; y++)
  {
    obstVertex[i].Add(Convert.ToDouble(split[i+(y*size[0])]));
  }
}
如何使用linq找到最大值或最小值


提前感谢

我假设obstVertex是这样声明的:

List<List<double>> myList;

myList.Add(new List(new double[] { 0, 16, 15, 0, 2.7217, 3.7217 }));
myList.Add(new List(new double[] { 0, 0, 15, 15, 5.6904, 5.6904 }));

List<double> maxList = myList.Select(l => l.Max()).ToList();
List<double> minList = myList.Select(l => l.Min()).ToList();
List<List<double>> obstVertex;
要获取每列的所有最小值,请尝试以下操作:

class Program
{
    static void Main(string[] args)
    {
        var l = new List<List<double>>() {new List<Double>() {0, 16.0000, 15.0000, 0, 2.7217, 3.7217}, 
                                          new List<Double>() {0, 0, 15.0000, 15.0000, 5.6904, 5.6904}};

        int i = 1;
        var result = from sublist in l
                     select new { min = sublist.Min(), max = sublist.Max(), index = i++ };

        foreach (var r in result)
            Console.WriteLine(String.Format("Index: {0} Min: {1} Max: {2}",r.index,  r.min, r.max));

        Console.ReadKey();
    }
}

它将获得列表列表中每个子列表的最小值和最大值。

谢谢peter,这如何给出第一列和第二列的最大值/最小值?它将为您提供一个最大值列表和一个最小值列表,每列一个值。它通过在每列上调用Max和Min并返回结果来实现这一点。对不起,我应该重新措辞。。。当您说l=>l.Max时,这是否意味着每个列都被选中?这意味着它在每个内部列表上调用.Max。它类似于:myList{maxList.Addlist.Max;}中的foreach list。当您引用代码中未显示的成员(即大小、拆分和obstVertex)时,您的代码有点混乱。是的,对不起。size是一个数组,用于指定列表的大小。因此,给出的示例的大小[0]=6,大小[1]=2。split是已分隔的字符串数组。obstVertex是列表的列表。哪些列是i循环还是y循环?
    static void Main(string[] args)
    {

        List<List<double>> lists = new List<List<double>>() { 
            new List<double>(){0 , 0 } ,
            new List<double>(){16.0000 , 0 } ,
            new List<double>(){16.0000 , 15.0000 } ,
            new List<double>(){0 , 15.0000 } ,
            new List<double>(){2.7217 , 5.6904 } , 
            new List<double>(){3.7217 , 5.6904 } 
        };

        var r =    new {
                         col1_max = (from x in lists select x[0]).Max(),
                         col1_min = (from x in lists select x[0]).Min(),
                         col2_max = (from x in lists select x[1]).Max(),
                         col2_min = (from x in lists select x[1]).Min(), 
                     }; 


        Console.WriteLine(string.Format("col1_max = {0}\r\ncol1_min = {1}\r\ncol2_max = {2}\r\ncol3_max = {3}", r.col1_max , r.col1_min , r.col2_max , r.col2_min));


        Console.Read();
    }
    static void Main(string[] args)
    {

        List<List<double>> lists = new List<List<double>>() { 
            new List<double>(){0 , 0 } ,
            new List<double>(){16.0000 , 0 } ,
            new List<double>(){16.0000 , 15.0000 } ,
            new List<double>(){0 , 15.0000 } ,
            new List<double>(){2.7217 , 5.6904 } , 
            new List<double>(){3.7217 , 5.6904 } 
        };

        var r =    new {
                         col1_max = (from x in lists select x[0]).Max(),
                         col1_min = (from x in lists select x[0]).Min(),
                         col2_max = (from x in lists select x[1]).Max(),
                         col2_min = (from x in lists select x[1]).Min(), 
                     }; 


        Console.WriteLine(string.Format("col1_max = {0}\r\ncol1_min = {1}\r\ncol2_max = {2}\r\ncol3_max = {3}", r.col1_max , r.col1_min , r.col2_max , r.col2_min));


        Console.Read();
    }