Betrachten Sie das folgende allgemeine JavaScript-Konstrukt
var ages = people.map(person => person.age);
Geben Sie das gewünschte Ergebnis, das eine Reihe von Altersgruppen ist.
Was ist das Äquivalent dazu in C # ? Bitte fügen Sie ein einfaches Beispiel bei. Die Dokumentation zeigt select
oder ist möglich, selectAll
aber ich kann kein Beispiel online oder eine andere SO-Frage finden, die eingefügt werden kann und funktioniert.
Wenn möglich, geben Sie ein Beispiel an, das das folgende Array {1,2,3,4}
in das folgende verwandelt {'1a','2a','3a','4a'}
. Fügen Sie für jedes Element "a" an das Ende an und verwandeln Sie es von einer Ganzzahl in eine Zeichenfolge.
javascript
c#
arrays
dictionary
Code Whisperer
quelle
quelle
(new[]{1,2,3,4}).Select(v => String.Format("{0}a", v))
.ToArray()
am Ende verpasst .Antworten:
Dies wird als Projektion bezeichnet, die
Select
in LINQ aufgerufen wird . Das gibt kein neues Array zurück (wie es JavaScript.map
tut), sondern einIEnumerable<T>
. Sie können es mit in ein Array konvertieren.ToArray
.using System.Linq; // Make 'Select' extension available ... var ages = people.Select(person => person.Age).ToArray();
Select
funktioniert mit allenIEnumerable<T>
Arrays, die implementiert werden. Sie benötigen lediglich .NET 3.5 und eineusing System.Linq;
Anweisung.Verwenden Sie für Ihr zweites Beispiel so etwas. Beachten Sie, dass keine Arrays verwendet werden - nur Sequenzen.
var items = Enumerable.Range(1, 4).Select(num => string.Format("{0}a", num));
quelle
var items = Enumerable.Range(1, 4).Select(num => string.Format($"{num}a"));
Nur zur Information, wenn
people
es sich um eine handeltList<Person>
, ist dieConvertAll
Methode der von JS ziemlich ähnlichmap
, z.var ages = people.ConvertAll<int>(person => person.age);
Wenn Sie jedoch ein Array haben und
List<T>
Methoden verwenden möchten , können Sie dies leicht erreichen, indem Sie Ihre Variable aus dem Array in eine Liste konvertieren, z.var ages = people.ToList().ConvertAll<int>(person => person.age);
Und schließlich, wenn Sie wirklich ein Array zurück benötigen, können Sie es zurückkonvertieren, z.
var ages = people.ToList().ConvertAll<int>(person => person.age).ToArray();
Das letzte Beispiel ist jedoch nicht so gut wie die anderen Antworten, und Sie sollten es verwenden,
Select
wenn Sie nur mit Arrays arbeiten. Aber wenn du kannst, schlage ich vor, dass du umziehstList<T>
, es ist viel besser!quelle
Die LINQ-Erweiterungsmethoden für Sammlungen bieten Ihnen eine Vielzahl nützlicher Dienstprogramme.
Select
Ist einer von ihnen: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 + " ");
Dies sollte Folgendes ausgeben:
Dies kann sicher zu einem 1-Liner verdichtet werden:
string[] arr2 = arr.Select(el => el + "a").ToArray();
Ein Arbeitsbeispiel:
https://ideone.com/mxxvfy
Verwandte Dokumente:
Enumerable.Select
Grundlegende LINQ-Abfrageoperationen (C #)
quelle
Linqs
.Select
ist dasmap
Äquivalent und.Aggregate
ist dasfold
Äquivalent.var nums = new[] {1,2,3,4}; string[] r = nums.Select(x => x + "a").ToArray();
quelle
Sie können die Schlüsselwörter verwenden
from
,select
,in
undwhile
;Oder für Ihr Beispiel:
var ages = (from person in people select person.age).ToArray();
Die Syntax wäre also im Wesentlichen:
<<list-output>> = (from <<var-name>> in <<list-input>> select <<operation>>);
quelle