在C#中按列对二维数组进行排序
Posted
技术标签:
【中文标题】在C#中按列对二维数组进行排序【英文标题】:Sorting two dimensional array by columns in C# 【发布时间】:2022-01-24 00:09:20 【问题描述】:我想对二维数组进行排序。我不想订购第一个维度,而是订购内部维度。
例如,如果初始数组是这样的:
4, 1, 3,
6, 5, 2,
0, 9, 8
如果我们按第一行排序数组,结果将是:
1, 3, 4,
5, 2, 6,
9, 8, 0
我通过转置数组、排序和再次转置来做到这一点。但是有没有更好的方法呢?
【问题讨论】:
【参考方案1】:嗯,这有点奇怪,一开始我实际上误解了它。有很多方法可以做到这一点,但我能想到的方法都不是很好。我个人认为我会这样
public class Matrix
private List<RowGroup> _groups;
public Matrix(List<List<int>> matrix)
//Removed for simplicity
public void SortMaxtrixByRow(int rowNumber)
this._groups.Sort((r1, r2) =>
return r1.Col[rowNumber].CompareTo(r2.Col[rowNumber]);
);
public class RowGroup
public List<int> Col;
public RowGroup(List<int> col)
Col = col;
这与您的转置类似。主要的好处是它是一个对象,所以如果你必须在同一个集合上进行多种排序,它就不需要一遍又一遍地重新转置它。
除此之外,您可以复制所需的数组并对其进行排序,然后将每个值与原始值进行比较,以查看它如何移动并相应地移动其他行,但这只是假设您在每一行中使用唯一值,编写您的自己的排序算法,这样您就可以确定哪个索引,或者可以接受多个“正确”答案。
【讨论】:
嗨,扎克,谢谢你的回答,但不幸的是,我想订购列而不是行。与您类似的可以通过list.Sort((a, b) => a[rowNumber].CompareTo(b[rowNumber]));
或list.OrderBy(x => x[rowNumber]).ToList();
实现以上是关于在C#中按列对二维数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章