C# 根据键数组按属性对数组排序

opd*_*pdb 1 c# arrays sorting comparison

说我有以下 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"}
};
Run Code Online (Sandbox Code Playgroud)

根据键数组按名称对 MyClass 数组进行排序而不诉诸 for 循环的最佳方法是什么?

das*_*ght 5

一种方法如下:

var sorted = vals.OrderBy(s => Array.IndexOf(keys, s.name)).ToArray();
Run Code Online (Sandbox Code Playgroud)

请注意,此算法渐近地非常慢:它具有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();
Run Code Online (Sandbox Code Playgroud)