gpt4 book ai didi

c# - linq按顺序插入元素的方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:19 25 4
gpt4 key购买 nike

我有一个按元素的名称属性排序的元素集合。我需要在保持顺序的同时向集合中插入一个新元素。我正在寻找一种简洁的 LINQ 方法来做到这一点。我的代码在下面。 “this.Children”是集合,“d”是我需要插入的新元素。它需要两次遍历集合才能找到插入点。有没有办法从 First() 扩展方法中获取索引? (请不要建议使用 foreach,我知道 :),我正在学习 LINQ)。

谢谢!康斯坦丁


var v = this.Children.FirstOrDefault(x => string.Compare(x.Name, d.Name) > 0);
int index = this.Children.IndexOf(v);

if (index < 0)
{
this.children.Add(d);
}
else
{
this.Children.Insert(index, d);
}

最佳答案

是的,使用 overload of Select 其中包括索引和值:

var pair = this.Children
.Select((value, index) => new { value, index })
.FirstOrDefault(x => string.Compare(x.value.Name, d.Name) > 0);

if (pair == null)
{
Children.Add(d);
}
else
{
Children.Insert(pair.index, d);
}

请注意,尽管这仍然是低效的 - 如果您已经知道值已排序,则可以使用二进制印章来找出插入索引。在不知道 Children 类型的情况下很难给出示例代码虽然......已经有 List<T>.BinarySearch Array.BinarySearch .

学习 LINQ 令人钦佩 - 但当使用 LINQ 不是最佳方式时,学习它也很重要 :)

关于c# - linq按顺序插入元素的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780682/

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