C# 如何在数组列表中获取列最小值?

C# 如何在数组列表中获取列最小值?,c#,sorting,multidimensional-array,C#,Sorting,Multidimensional Array,我有一个存储在列表中的双精度数组,如下所示。我想从每一列中得到最小值。我知道我可以通过某种方式循环列表,得到最小值。但是,是否有一种更简单的方法可以从每一列中使用List.Min()获得相同的结果 List<double[]> BoxCoords = new List<double[]>(); <!-----------------Console output of BoxCoords List------------------------------!>

我有一个存储在列表中的双精度数组,如下所示。我想从每一列中得到最小值。我知道我可以通过某种方式循环列表,得到最小值。但是,是否有一种更简单的方法可以从每一列中使用List.Min()获得相同的结果

List<double[]> BoxCoords = new List<double[]>();

<!-----------------Console output of BoxCoords List------------------------------!>

 8.03698858873275  | -1622.419367705   | 180.603950687759   //List Entry 1
 8.03698858855283  | -1622.41905090503 | -220.203952098008  //List Entry 2 
-7.70512234523364  | -1665.73116372802 | -220.204298594721  //List Entry 3
List-BoxCoords=new-List();
对于世界其他地区:

List<double[]> BoxCoords = new List<double[]>();
var result = BoxCoords.Select(x=>x.Min()).ToList();
List-BoxCoords=new-List();
var result=BoxCoords.Select(x=>x.Min()).ToList();
对于列:

var result = new List<double>();
for (int i = 0; i < BoxCoords[0].Length; i++)//care! exception for jugged arrays
{
    result.Add(BoxCoords.SelectMany(x => x.Skip(i).Take(1).ToList()).ToList().Min());
}
var result=newlist();
for(int i=0;ix.Skip(i).Take(1.ToList()).ToList().Min());
}

假设您的列是由包装数组的序号定义的,而不是由每行中的值定义的,这里有一种方法,使用of
Select
,取消对数据的包装(使用
SelectMany
),然后在索引上对数据重新分组,然后应用
Min
是一种形式:

var columnMins = BoxCoords
    .SelectMany(bc => bc.Select((v, idx) => new {Idx = idx, Val = v}))
    .GroupBy(up => up.Idx)
    .Select(grp => grp.Min(x => x.Val));
如果需要将其作为
double
数组返回,可以在末尾添加
.ToArray()

[-7.70512234523364,-1665.73116372802,-220.204298594721]


演示

感谢您的快速回答。我对此进行了测试,但它从一行而不是一列返回最小值。我需要每个专栏的最小值谢谢你的回答。我不知道代码实际上是如何工作的,但它对我来说工作得非常完美:)这不会返回匿名类型的枚举吗?基本上,我们通过将原始数据结构解填充到一组扁平的元组中来“转换”原始数据结构,但同时记住行中的位置(使用Select重载)。在那之后,它就像在我们的索引上重新分组并应用聚合一样简单@Kapol,不,我只投射了
x.Val
的最小值,这是一个双精度,因此如果OP加在
.ToArray()上,它将是
IEnumerable
double[]