Мне нужен был способ, чтобы дать мне все, кроме последнего элемента в последовательности. Это моя текущая реализация:C#: реализация SkipLast
public static IEnumerable<T> SkipLast<T>(this IEnumerable<T> source)
{
using (IEnumerator<T> iterator = source.GetEnumerator())
{
if(iterator.MoveNext())
while(true)
{
var current = iterator.Current;
if(!iterator.MoveNext())
yield break;
yield return current;
}
}
}
Для чего мне это нужно - это что-то делать со всеми предметами, кроме последнего. В моем случае у меня есть последовательность объектов с различными свойствами. Затем я заказываю их по дате, а затем мне нужно выполнить настройку для всех из них, за исключением последнего элемента (который будет последним после заказа).
Дело в том, что я не слишком вхожу в эти счетчики, но на самом деле у меня нет никого, кто мог бы спросить: p Что мне интересно, если это хорошая реализация, или если я сделал небольшую или Большая ошибка. Или, может быть, это проблема, является странной и т. Д.
Я предполагаю, что более общей реализацией может быть метод AllExceptMaxBy
. Так как это то, что есть. У MoreLinq есть метод MaxBy
и MinBy
, и мой метод должен делать то же самое, но возвращать каждый элемент, кроме максимального или минимального.
Что такое точка остановки Маркова? В любом случае, хорошие предложения! Глубокое гнездование и пока (правда) были некоторыми из причин, почему мое решение было немного странным, хе-хе. – Svish
@ Jon, спасибо за разъяснение, что такое настоящая проблема с функциями Last-family. В моем случае, похоже, что SkipLast (5) должен быть 5 элементов позади ..., который, пожалуй, выглядит как хорошая работа для очереди. –