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);