gpt4 book ai didi

c# - 根据预先排序的列表对列表进行排序

转载 作者:太空狗 更新时间:2023-10-29 20:07:21 24 4
gpt4 key购买 nike

如何根据预先排序的列表对列表进行排序。

我有一个已经排序的列表。说,我的排序列表是

{"Junior Developer", "Developer", "Senior Developer", "Project Lead"}

现在,我想按照与上述列表相同的顺序对上述列表的任何子集进行排序。也就是说,如果我有输入

{"Developer", "Junior Developer"},我希望输出为 {"Junior Developer", "Developer"}

如果输入是 {"Project Lead", "Junior Developer", "Developer"},我希望输出为

{"Junior Developer", "Developer", "Project Lead"}. 

我怎样才能达到同样的效果?

最佳答案

最简单的方法是使用 LINQ 的 .OrderBy 扩展方法,以及预排序集合的 IndexOf 方法(或等效方法)。这里的想法是使用不同的值作为“排序键”进行排序(这非常有用,因为我们通常希望根据对象的属性之一对对象进行排序)。

var sorted = listToSort.OrderBy(s => listPreSorted.IndexOf(s)).ToList();

下面是一个数组示例:http://ideone.com/7oshhZ


请注意,如果您的列表非常很大,这可能会很慢,因为您的目标列表中的每个项目都必须在您的预排序集合中按顺序查找 (O( N * M),其中N为目标列表的长度,M为预排序列表的长度)。

为了克服这个限制,您可以生成一个查找,将预排序列表的项目映射到它们的索引,然后在您的 .OrderBy 中使用此查找(这将有一个 O(N + M),如果需要,您可以重新使用查找:

var preSortedLookup =
listPreSorted.Select((v, i) => new { Key = v, Value = i })
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

var sorted = listToSort.OrderBy(s => preSortedLookup[s]).ToList();

关于c# - 根据预先排序的列表对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26875915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com