如何在数组列表中获得列最小值
本文关键字:最小值 列表 数组 | 更新日期: 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
假设您的列是由包装数组的序数定义的,而不是由每行中的值定义的,这里有一种方法使用Select
的index
重载来取消数据的枢轴(使用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());
}