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?
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.
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();
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);
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.
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);