web-dev-qa-db-fra.com

comment prendre tous les éléments du tableau sauf le dernier élément en C #

J'ai un tableau de chaînes comme ceci.

string[] queries avec les données de plus d'une chaîne.

Je veux ignorer la dernière chaîne de l'élément et prendre le reste. Je suis venu avec

var remStrings = queries.Reverse().Skip(1).Take(queries.Length - 1);

Y a-t-il une meilleure alternative à cela?

37
Mohan Gundlapalli
var remStrings = queries.Take(queries.Length - 1);

Pas besoin d'inverser et de sauter. Prenez juste un élément de moins qu’il n’y en a dans le tableau.

Si vous voulez vraiment les éléments dans l’ordre inverse, vous pouvez ajouter un .Reverse() jusqu’à la fin.

78
Justin Niessner

Pourquoi ne pas simplement avoir:

var remStrings = queries.Take(queries.Length-1);

Ce qui les retournera dans le même ordre.

Ajoutez .Reverse() pour échanger la commande si cela est nécessaire:

var remStrings = queries.Take(queries.Length-1).Reverse();
9
ChrisF

L’équipe des extensions réactives de Microsoft dispose des extensions interactives (NuGet "System.Interactive") qui vous permettent de procéder comme suit:

var remStrings = queries.SkipLast(1);
4
Enigmativity

Cette réponse d’un message connexe mérite également d’être mentionnée car elle s’applique avec élégance à tout IEnumerable lors d’un seul passage, sans qu’il soit nécessaire de connaître son nombre d’éléments à l’avance.

2
Erwin Mayer

Modifié: Vous pourriez effectivement remplacer votre tableau par le même tableau moins le dernier élément par la ligne ou le code suivant:

queries = queries.Take(queries.Length - 1).ToArray();

Si vous souhaitez créer une méthode qui le fait pour vous, vous pouvez utiliser les éléments suivants:

public static string[] TrimLastElement(string[] arr) {
    return arr.Take(arr.Length - 1).ToArray();
}

Et implémentez-le dans votre code comme suit:

queries = TrimLastElement(queries);
0
FrostyOnion