假设我有以下 2 个数组
string[] keys = new string[]{"Annalee Call","Bishop","Ash"};
MyClass[] vals = new MyClass[]{
new MyClass(){name = "Ash"},
new MyClass(){name = "Annalee Call"},
new MyClass(){name = "Bishop"}
};
在不借助 for 循环的情况下,基于键数组按名称对 MyClass 数组进行排序的最佳方法是什么?
最佳答案
一种方法如下:
var sorted = vals.OrderBy(s => Array.IndexOf(keys, s.name)).ToArray();
请注意,此算法渐近地非常慢:它具有 O(N^2*LogN)
复杂度。要将其恢复到“正常”O(N*LogN)
,请准备一个用于查找索引的查找字典,如下所示:
var keyDict = keys.Select((v,i)=>new {v,i}).ToDictionary(p=>p.v, p=>p.i);
var sorted = vals.OrderBy(s => keyDict[s.name]).ToArray();
关于C# 根据键数组按属性对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18199592/