例如这个矩阵:
3 2
2 2
1 2
这是错误的:
IEnumerable<IEnumerable<int>> inputRows = ...;
必须成为:
1 2
2 2
2 3
所以,所有最大的数字将集中在右下角。 首先,我需要对列号(不是整列)进行排序,这很容易做到:
var result = inputRows.Select(x=> x.OrderBy(y=>y));
此步骤后矩阵将变为:
2 3
2 2
1 2
但是如何使用LINQ整理整行?
PS 我对固定阵列解决方案不感兴趣。
答案 0 :(得分:3)
您需要一个行比较器。我们要记住,所有行都有相同的长度:
public class RowComparer : IComparer<IEnumerable<int>>
{
public int Compare(IEnumerable<int> x, IEnumerable<int> y)
{
// TODO: throw ArgumentNullException
return x.Zip(y, (xItem, yItem) => xItem.CompareTo(yItem))
.Where(c => c != 0).FirstOrDefault();
}
}
并将其用于分类:
inputRows.Select(r => r.OrderBy(x => x)).OrderBy(r => r, new RowComparer())
样品的输出:
[
[ 1, 2 ],
[ 2, 2 ],
[ 2, 3 ]
]
答案 1 :(得分:-1)
也许这个?
var result = inputRows.Select(row => row.OrderBy(col => col)).OrderBy(row => row.Sum());
目前尚不清楚您希望订单行:整行还是每个单元格?