Possible en double:
LINQ list to sentence format (insert commas & “and”)Une meilleure façon de "virgule et et iser" un IEnumerable en C#
Imaginer ces entrées et résultats:
[] -> ""
["Hello World!"] -> "Hello World!"
["Apples", "bananas"] -> "Apples, and bananas" (put your grammar books away)
["Lions", "Tigers", "Bears"] -> "Lions, Tigers, and Bears" (oh my!)
maintenant , imaginez que les entrées sont toutes IEnumerable<string>
. Qu'est-ce qu'un bien (où bon peut englober "petit et bien rangé", "facile à comprendre", "utilise la pleine capacité de LINQ", ou autre tant que cela est justifié) pour écrire une fonction en C# pour cela? Je voudrais vraiment éviter les approches "en boucle impérative".
Mon approche actuelle ressemble à:
string Commaize (IEnumerable<string> list) {
if (list.Count() > 1) {
list = list.Take(list.Count() - 2).Concat(
new[] { list.Reverse().Take(2).Reverse()
.Aggregate((a, b) => a + " and " + b) });
}
return String.Join(", ", list.ToArray());
}
Mais ça ne se sent pas très « bon ». C'est pour .NET3.5 donc le bit ToArray()
est requis ici. Si list
est nul, le résultat est UB.
Pas un doublon * exact * ... celui-ci utilise la virgule d'Oxford, l'autre question ne le fait pas. Il peut réellement changer la mise en œuvre (je sais que ça change un peu le mien). Aussi, voir [le blog récent de Jeff Atwood] (http://blog.stackoverflow.com/2010/11/dr-strangedupe-or-how-i-learned-to-stop-worrying-and-love-duplication/) à propos de la façon dont la duplication est en fait une bonne chose. –