gpt4 book ai didi

c# - LINQ SkipWhile - 至少取一个

转载 作者:行者123 更新时间:2023-12-03 22:55:14 25 4
gpt4 key购买 nike

我有一个 IEnumerable 值,我需要在开始时跳过某些元素,为此我使用 SkipWhile 。但是,我肯定需要至少一个元素(假设序列甚至包含至少一个元素)。如果所有元素都通过谓词(即跳过所有元素),我只想获取最后一个元素。如果没有像这样的昂贵技巧,这是否可能?

items.SkipWhile(/* my condition */).FallbackIfEmpty(items.Last())

(昂贵的:它需要迭代序列两次,我想阻止这种情况)

最佳答案

LINQ 没有为此提供内置方法,但您可以编写自己的扩展。

此实现大部分源自 Microsoft 的 reference code :

public static IEnumerable<TSource> SkipWhileOrLast<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
) {
bool yielding = false;
TSource last = default(TSource);
bool lastIsAssigned = false;
foreach (TSource element in source) {
if (!yielding && !predicate(element)) {
yielding = true;
}
if (yielding) {
yield return element;
}
lastIsAssigned = true;
last = element;
}
if (!yielding && lastIsAssigned) {
yield return last;
}
}

关于c# - LINQ SkipWhile - 至少取一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46693059/

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