web-dev-qa-db-fra.com

Exemple de array.map () en C #?

Considérez la construction JavaScript commune suivante

var ages = people.map(person => person.age);

Donner le résultat souhaité, qui est un tableau d'âges.

Quel est l'équivalent de ceci dans C # ? S'il vous plaît inclure un exemple simple. La documentation indique select ou possible selectAll, mais je ne trouve pas d’exemple en ligne ni aucune autre question SO pouvant être collée et qui fonctionne.

Si possible, donnez un exemple qui transforme le tableau {1,2,3,4} suivant en {'1a','2a','3a','4a'} suivant. Pour chaque élément, ajoutez "a" à la fin, en le faisant passer d'un entier à une chaîne.

34
Code Whisperer

Ceci s'appelle la projection qui s'appelle Select dans LINQ. Cela ne renvoie pas un nouveau tableau (comme le fait le .map de JavaScript), mais un IEnumerable<T>. Vous pouvez le convertir en tableau avec .ToArray.

var ages = people.Select(person => person.Age).ToArray();

Select fonctionne avec tous les IEnumerable<T> implémentés par les tableaux. Vous avez juste besoin de .NET 3.5 et d'une instruction using System.Linq;.

Pour votre deuxième exemple, utilisez quelque chose comme ceci. Notez qu'il n'y a pas de tableaux en cours d'utilisation - seulement des séquences.

 var items = Enumerable.Range(1, 4).Select(num => string.Format("{0}a", num));
60
Daniel A. White

Seulement pour info, si people est un List<Person>, la méthode ConvertAll est assez similaire à map de JS, par exemple:

var ages = people.ConvertAll<int>(person => person.age);

Mais si vous avez un tableau et que vous voulez utiliser n’importe quelle méthode List<T>, vous pouvez facilement y parvenir en convertissant votre variable en une liste à partir d’un tableau, par exemple:

var ages = people.ToList().ConvertAll<int>(person => person.age);

Et enfin, si vous avez vraiment besoin d’un retour Array, vous pouvez le reconvertir, par exemple:

var ages = people.ToList().ConvertAll<int>(person => person.age).ToArray();

Mais ce dernier exemple n’est pas aussi bon que les autres réponses et vous devriez utiliser Select si vous travaillez uniquement avec des tableaux. Mais si vous le pouvez, je vous suggère de passer à List<T>, c'est beaucoup mieux!

5
Buzinas

Le .Select de Linq est l'équivalent map et .Aggregate est l'équivalent fold.

var nums = new[] {1,2,3,4};
string[] r = nums.Select(x => x + "a").ToArray();
1

Les méthodes d'extension LINQ sur les collections vous offrent une foule d'utilitaires vraiment pratiques. Select est l'un d'entre eux:

int[] arr = { 1, 2, 3 };
IEnumerable<string> list = arr.Select(el => el + "a");
string[] arr2 = list.ToArray();

foreach (var str in arr2)
    Console.Write(str + " ");

Cela devrait produire:

1a 2a 3a

Ceci peut être condensé en toute sécurité sur une doublure:

string[] arr2 = arr.Select(el => el + "a").ToArray();

Un exemple de travail:

https://ideone.com/mxxvfy

Documents liés:

Enumerable.Select

Opérations de base des requêtes LINQ (C #)

1
pb2q

Vous pouvez utiliser les mots clés from, select, in et while;
Ou pour votre exemple: 

 var ages = (from person in people select person.age).ToArray();

Donc, la syntaxe serait essentiellement la suivante:

 <<list-output>> = (from <<var-name>> in <<list-input>> select <<operation>>);
0
merlin