How to take all but the last element in a sequence using LINQ?

前端 未结 22 1566
南笙
南笙 2020-11-30 02:51

Let\'s say I have a sequence.

IEnumerable sequence = GetSequenceFromExpensiveSource();
// sequence now contains: 0,1,2,3,...,999999,1000000
         


        
22条回答
  •  旧巷少年郎
    2020-11-30 03:24

    A slight variation on the accepted answer, which (for my tastes) is a bit simpler:

        public static IEnumerable AllButLast(this IEnumerable enumerable, int n = 1)
        {
            // for efficiency, handle degenerate n == 0 case separately 
            if (n == 0)
            {
                foreach (var item in enumerable)
                    yield return item;
                yield break;
            }
    
            var queue = new Queue(n);
            foreach (var item in enumerable)
            {
                if (queue.Count == n)
                    yield return queue.Dequeue();
    
                queue.Enqueue(item);
            }
        }
    

提交回复
热议问题