2 votes

Quel est l'équivalent de JavaScript Array.from en C# (sans while/for) ?

Je m'habitue à JS après quelques années de programmation Node.js et je me demande comment on pourrait éviter tandis que en C# pour ajouter des éléments dans un tableau en utilisant une méthode plus "map-like" (comme AddRange dans les énumérables C#).

Par exemple, si je veux un tableau de 10 éléments en JavaScript, chacun ayant une propriété qui est incrémentée à chaque fois, je le ferais :

const cells = Array.from({ length:10 }, (_, i) => { 'number': i });
// gives cells = [{number: 0}, {number: 1}, ... until 9]

Comment faire cela en C# sans while o for boucle ?

int itemWantedCount = 10;
int i = 0;
while(cells.Count < itemWantedCount)
{
   cells.Add(new MyObject(i++));
}

J'aimerais trouver une méthode pour utiliser cells.AddRange à la place, sans utiliser for/while, si c'est possible.

6voto

Heinzi Points 66519

Vous pouvez utiliser LINQ pour le traitement des listes de style fonctionnel en C#. Exemple :

// We don't need Select in this toy example, but this is where
// you would put your "map" operation.
var cells = Enumerable.Range(0, 10).Select(i => i).ToArray();

// prints 0123456789
foreach (var c in cells)
    Console.Write(c);     

Explication :

  • Enumerable.Range(start, count) énumère nos numéros (paresseusement - rien ne se passe avant l'appel à ToArray() plus tard).
  • Select est "map" - vous le connaissez déjà. Dans votre exemple, vous remplaceriez i => i avec i => new MyObject(i) .
  • ToArray() : Matérialise l'énumération créée paresseusement. Puisque les tableaux sont de taille fixe en C#, une alternative plus idiomatique serait ToList() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X