Char.IsLetter(p-6ren">
gpt4 book ai didi

c# - Linq 表达式从最后一个函数获取谓词项

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

是否存在任何 Linq 表达式,它从 source list 的末尾给出谓词列表。

即:"abc1zxc".ToCharArray().SomeMagicLinq(p=>Char.IsLetter(p));

应该给“zxc

最佳答案

您可以使用这种方法:

var lastLetters = "abc1zxc".Reverse().TakeWhile(Char.IsLetter).Reverse();
string lastLettersString = new String(lastLetters.ToArray());

这不是最有效的方式,但可行且可读。

如果你真的需要它作为一个单一的(优化的)方法,你可以使用这个:

public static IEnumerable<TSource> GetLastPart<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
var buffer = source as IList<TSource> ?? source.ToList();
var reverseList = new List<TSource>();
for (int i = buffer.Count - 1; i >= 0; i--)
{
if (!predicate(buffer[i])) break;
reverseList.Add(buffer[i]);
}
for (int i = reverseList.Count - 1; i >= 0; i--)
{
yield return reverseList[i];
}
}

那么就更简洁了:

string lastLetters = new String("abc1zxc".GetLastPart(Char.IsLetter).ToArray());

关于c# - Linq 表达式从最后一个函数获取谓词项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39640801/

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