C# 根据一组固定字符串按属性名称对列表进行排序

C# 根据一组固定字符串按属性名称对列表进行排序,c#,arrays,performance,sorting,C#,Arrays,Performance,Sorting,我的目标是根据一组固定的字符串按Name属性对列表进行排序preferredorder 考虑: class MyClass { string Name { get; set; } } List<string> preferedOrder = List<string> { "AA", "BB", ... } 我的问题是,只有使用string[]实现preferredorder时,如何实现相同的结果?比如: string[] preferedOrder = ne

我的目标是根据一组固定的字符串按
Name
属性对列表进行排序
preferredorder

考虑:

class MyClass
{
    string Name { get; set; }
}

List<string> preferedOrder = List<string> { "AA", "BB", ... } 
我的问题是,只有使用
string[]
实现
preferredorder
时,如何实现相同的结果?比如:

string[] preferedOrder = new[] { "AA", "BB", ... }
我之所以这么问是因为这是一个性能关键的代码,我认为用数组实现
首选顺序将获得更好的结果。

最终得到一个:

return list.OrderBy(item => Array.IndexOf(preferedOrder, item.Name));
如果数组很长,我建议将其转换为
字典
,因为字典更快(
字典[…]
具有
O(1)
时间复杂度,而
数组的
O(N)
。IndexOf
):

或者如果
项目名称
可以在
地图中缺席

  // -1 - abscent values will be on top
  return list.OrderBy(item => map.TryGetValue(item.Name, out var v) ? v : -1);
   string[] preferedOrder = new[] 
     { "AA", "BB", ... }

   Dictionary<string, int> map = preferedOrder
     .Select((value, index) => new {value, index}) 
     .ToDictionary(item => item.value, item => item.index);
  return list.OrderBy(item => map[item.Name]);
  // -1 - abscent values will be on top
  return list.OrderBy(item => map.TryGetValue(item.Name, out var v) ? v : -1);