gpt4 book ai didi

c# - 在序列中获取 "next"元素的最简单方法?

转载 作者:行者123 更新时间:2023-11-30 13:27:51 24 4
gpt4 key购买 nike

我有一个 ICollection<SomeClass> .

public class SomeClass
{
public string Text { get; set; }
public bool IsPreferred { get; set; }
}

那里的元素已经被预订,所以“下一步”确实意味着什么。

在我的场景中,序列的内容如下所示:

[0] - "a", false

[1] - "b", true

[2] - "c", false

我正在尝试获取 IsPreferred == true 之后的“下一个”元素.所以在上面,我想得到元素 2,我想清除另一个 IsPreferred值(value)。

所以我想结束这个:

[0] - "a", false

[1] - "b", false

[2] - "c", true

基本上是将首选项目向下洗牌。

最好的方法是什么?我唯一能想到的是创建一个新数组,将它们一个一个地添加,跟踪首选数组的索引,然后在上述索引 +1 处获取元素。

有什么更好的主意吗?

最佳答案

我会使用枚举器遍历集合——这就是 foreach 在幕后所做的事情:

var enumerator = collection.GetEnumerator();

while (enumerator.MoveNext())
{
if (enumerator.Current.IsPreferred)
{
var oldPreferred = enumerator.Current;

if (enumerator.MoveNext())
{
oldPreferred.IsPreferred = false;
enumerator.Current.IsPreferred = true;
}

break;
}
}

这假设您希望在找到第一个带有 IsPreferred 的项目后停止,如果这是最后一个项目,仍然清除 IsPreferred。

编辑:修复了 IsPreferred 在单个项目的集合上始终设置为 false 的边缘情况

关于c# - 在序列中获取 "next"元素的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8583854/

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