J'avais besoin d'une méthode pour me donner tout sauf le dernier élément d'une séquence. Ceci est ma mise en œuvre actuelle:C#: implémentation de 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;
}
}
}
Ce dont j'ai besoin est de faire quelque chose avec tous les éléments sauf le dernier. Dans mon cas, j'ai une séquence d'objets avec diverses propriétés. Je les commande ensuite par date, et ensuite je dois faire un ajustement à tous, sauf l'article le plus récent (qui serait le dernier après la commande). Il est vrai que je ne suis pas encore dans ces enquêteurs et que je n'ai pas vraiment de questions ici: p Ce que je me demande, c'est si c'est une bonne implémentation, ou si j'ai fait une petite ou grosse gaffe quelque part. Ou si peut-être cette prise sur le problème est un étrange, etc
Je suppose qu'une implémentation plus générale aurait pu être une méthode AllExceptMaxBy
. Puisque c'est un peu ce que c'est. Le MoreLinq a une méthode MaxBy
et MinBy
et ma méthode a besoin de faire la même chose, mais retourne tous les items sauf le maximum ou le minimum.
Qu'est-ce qu'un point d'arrêt de Markov? Quoi qu'il en soit, de bonnes suggestions! La nidification profonde et tandis que (vrai) était quelques-unes des raisons pour lesquelles ma solution se sentait un peu bizarre, hehe. – Svish
@Jon, merci de clarifier ce qu'est le vrai problème avec les fonctions Last-family. Dans mon cas, il semblerait que SkipLast (5) doive avoir 5 éléments derrière ... ce qui semble être un bon travail pour une file d'attente, peut-être. –