是否存在Linq
表達式可以從source list
的末尾給出一個謂詞列表。Linq表達式從上一個函數中獲取謂詞項
即:"abc1zxc".ToCharArray().SomeMagicLinq(p=>Char.IsLetter(p));
應該給 「ZXC」
是否存在Linq
表達式可以從source list
的末尾給出一個謂詞列表。Linq表達式從上一個函數中獲取謂詞項
即:"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());
工作,但使用3 Linq表達式。我要求做一個:( – Kowalski
@Kowalski:它不使用3 [查詢表達式](https://msdn.microsoft.com/en-us/library/bb397676.aspx),但它使用三個LINQ方法,但只有一個表達式(第一行),但是你可以自由地創建一個新的方法,在一次調用中完成所有這些。 –
@Kowalski。添加了一種方法 –
的[使用LINQ獲得最後N個可能的複製一個集合的元素?](http://stackoverflow.com/questions/3453274/using-linq-to-get-the-last-n-elements-of-a-collection) –
不完全是,它給出了最後一個N元素,但我問了一個查詢(元素數量未知)。 – Kowalski
哦,對,對不起,我的壞。這將做到:'「abc1zxc」.Reverse()。TakeWhile(c => char.IsLetter(c))。Reverse()'。 –