如何在数组列表中获得列最小值

本文关键字:最小值 列表 数组 | 更新日期: 2023-09-27 18:04:26

我有一个存储在列表中的双精度数组,如下所示。我想从每一列中得到最小值。我知道我可以循环遍历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

如何在数组列表中获得列最小值

假设您的列是由包装数组的序数定义的,而不是由每行中的值定义的,这里有一种方法使用Selectindex重载来取消数据的枢轴(使用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]

Demo .Net Fiddle

for line:

List<double[]> BoxCoords = new List<double[]>();
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());
}