gpt4 book ai didi

c# - 按数组元素排序 Linq 列表

转载 作者:行者123 更新时间:2023-12-05 01:55:12 26 4
gpt4 key购买 nike

我有以下代码-

var refNosToOrder = new int[9] {1,2,3,4,5,6,7,8,9}

var orderedList = lst.OrderBy(x=>x.RefNo==7)
.ThenBy(y=> refNosToOrder.Contains(y.RefNo)).ToList();

lst是包含 int 属性的类对象列表 - RefNo:即 List<SampleClass>

class SampleClass
{
public int RefNo {get;set;}
}

lst包含 RefNo 的所有未排序数据:

lst = 2,4,6,9,7,5,8,1,3

我想做什么-

首先我要订购lst通过将第一个元素保留为 - 7 ;那么对于列表的其余部分,它应该被排序为数组 refNosToOrder

即我期望的最终输出是 -

7,1,2,3,4,5,6,8,9

用上面的代码——

var orderedList = lst.OrderBy(x=>x.RefNo==7)
.ThenBy(y=> refNosToOrder.Contains(y.RefNo)).ToList();

它正在给予 - 2,4,6,9,7,5,8,1,3即这段代码根本没有对列表进行排序。

最佳答案

Contains 返回一个元素是否在列表中的 bool 值,这在这里用处不大。相反,您可以按该元素的索引排序:

var orderedList = 
lst.OrderBy(x => x.RefNo != 7)
.ThenBy(y => Array.IndexOf(refNosToOrder, y.RefNo))
.ToList();

编辑:
根据 Jeroen Mostert 的评论,这种排序具有二次复杂性。对于大型 refNosToOrder,首先将数组转换为订单字典然后使用它进行排序可能更有效:

var orderDict = 
Enumerable.Range(0, refNosToOrder.Length).ToDictionary(i => refNosToOrder[i]);
var orderedList =
lst.OrderBy(x => x.RefNo != 7).ThenBy(y => orderDict[y.RefNo]).ToList();

关于c# - 按数组元素排序 Linq 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70349695/

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