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

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)

bur*_*ION 6

对于行:

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)


Stu*_*tLC 6

假设您的列是由包装数组的序数定义的,而不是由每行中的值定义的,这里是一个使用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小提琴