Comment prendre tous, mais le dernier élément dans une séquence à l'aide de LINQ?

Disons que j'ai une séquence.

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

L'obtention de la séquence n'est pas bon marché et est généré dynamiquement, et je veux parcourir une fois seulement.

Je veux obtenir 0 - 999999 (c'est à dire tout sauf le dernier élément)

Je reconnais que je pourrais faire quelque chose comme:

sequence.Take(sequence.Count() - 1);

mais que les résultats dans les deux énumérations sur le gros de la séquence.

Est-il LINQ construction qui me permet de le faire:

sequence.TakeAllButTheLastElement();
  • Vous avez le choix entre une O(2n) en temps O(comte) de l'espace de l'efficacité de l'algorithme, lorsque celui-ci a également besoin de déplacer des éléments dans un tableau interne.
  • Dario, pourriez-vous nous expliquer pour quelqu'un qui n'est pas que dans les grandes o-notation?
  • Voir également cette double question: stackoverflow.com/q/4166493/240733
  • J'ai fini avec la mise en cache par la conversion de la collecte à la Liste, puis en appelant sequenceList.RemoveAt(sequence.Count - 1);. Dans mon cas, il est acceptable parce que, après tout LINQ manipulations je dois le convertir en tableau ou IReadOnlyCollection de toute façon. Je me demande ce qui est votre cas où vous ne l'envisage même pas de mise en cache? Comme je peux le voir, même approuvé réponse fait un peu de mise en cache si simple de conversion de List est beaucoup plus facile et plus rapide à mon avis.
InformationsquelleAutor Mike | 2009-11-22