911*_*pid 3 c# sorting multidimensional-array
我有一个存储在列表中的双精度数组,如下所示.我希望从每个列中获得最小值.我知道我可以以某种方式遍历列表并获得最小值.但是,有没有一种更简单的方法来使用每个列的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
Run Code Online (Sandbox Code Playgroud)
对于行:
List<double[]> BoxCoords = new List<double[]>();
var result = BoxCoords.Select(x=>x.Min()).ToList();
Run Code Online (Sandbox Code Playgroud)
列:
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());
}
Run Code Online (Sandbox Code Playgroud)
假设您的列是由包装数组的序数定义的,而不是由每行中的值定义的,这里是一个使用index重载的方法Select,用于取消数据(with 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));
Run Code Online (Sandbox Code Playgroud)
.ToArray()如果你需要将它作为一个数组返回,你可以在最后添加double
[-7.70512234523364,-1665.73116372802,-220.204298594721]
演示.Net小提琴