我以为我在网上排序时找到了我需要的一切,但这个让我望而却步。我有一个类的单个实例。该类有两个数组。我必须根据两个数组之一对类的两个元素进行排序。对单个阵列进行排序很容易 - 但是如何对两者的组合进行排序?我认为它会涉及IComparable,但这似乎是针对该类的多个实例,而不仅仅是一个。
该类(我想对数据进行排序,降序):
public class RGraphData
{
public int[] data { get; set; }
public string[] labels { get; set; }
}
请注意,数据和标签中的项目数相同。
答案 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);