使用多个数组对类的单个实例进行排序

时间:2018-02-05 22:28:00

标签: c# arrays sorting icomparable

我以为我在网上排序时找到了我需要的一切,但这个让我望而却步。我有一个类的单个实例。该类有两个数组。我必须根据两个数组之一对类的两个元素进行排序。对单个阵列进行排序很容易 - 但是如何对两者的组合进行排序?我认为它会涉及IComparable,但这似乎是针对该类的多个实例,而不仅仅是一个。

该类(我想对数据进行排序,降序):

public class RGraphData
{
    public int[] data { get; set; }
    public string[] labels { get; set; }
}

请注意,数据和标签中的项目数相同。

2 个答案:

答案 0 :(得分:0)

使用带有两个数组的Array.Sort overload

Array.Sort(data, labels, new DescendingOrderComparer());

每个MSDN:

  

keys数组中的每个键在items数组中都有对应的项。在排序过程中重新定位键时,同样重新定位items数组中的相应项。因此,items数组根据keys数组中相应键的排列进行排序。

要对数据降序进行排序,您需要一个自定义IComparer来按降序比较项目:

public class DescendingOrderComparer : IComparer<int>
{
    public int Compare(int a, int b) => b.CompareTo(a);
}

答案 1 :(得分:0)

这会将每个data[i]label[i]关联为KeyValuePair,并为您提供有序IEnumerable的回复:

labels.Zip(data, (l, d) => new KeyValuePair<string, int>(l, d))
    .OrderByDescending(p => p.Value);