在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) =&gt; a[rowNumber].CompareTo(b[rowNumber]));list.OrderBy(x =&gt; x[rowNumber]).ToList(); 实现

以上是关于在C#中按列对二维数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

C++ 按列对二维向量进行排序

为啥在 C# 中的二维数组中按列写入速度很慢

如何按列对多维数组进行排序?

如何在 C# 中对二维(矩形)数组进行排序?

基于一列对二维数组进行排序

基于列对二维向量数组进行排序