it-swarm.com.de

Wie kann ich eine durch Kommas getrennte Zeichenfolge in eine Liste <int> konvertieren?

string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',');

Dies funktioniert nicht, da die split-Methode einen String zurückgibt []

Bitte helfen Sie.

174
ignaciofuentes

Hier ist eine Möglichkeit, dies zu tun:

List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
387
dasblinkenlight

Wenn Sie eine einfache Überprüfung einschließen und ungültige Werte überspringen möchten (anstatt eine Ausnahme auszulösen), verwendet TryParse Folgendes:

string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
                    .Select(m => { int.TryParse(m, out mos); return mos; })
                    .Where(m => m != 0)
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5

EDIT: Hier ist eine aktualisierte Abfrage basierend auf dem Feedback von Antoine. Es ruft zuerst TryParse auf, um fehlerhafte Werte herauszufiltern, und dann Parse, um die eigentliche Konvertierung durchzuführen.

string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
                    .Where(m => int.TryParse(m, out mos))
                    .Select(m => int.Parse(m))
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5
20
khalid13

Sie können LINQ mit int.Parse() verwenden, um string[] zu einem IEnumerable<int> und übergebe das Ergebnis an List<T> Konstrukteur:

var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
14
Justin Niessner

Ein wenig LINQ macht einen langen Weg:

 List<int> TagIds = tags.Split(',')
         .Select(t => int.Parse(t))
         .ToList();
7
Henk Holterman

Ohne LINQ Query können Sie diese Methode wählen,

string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();

und dann können Sie diese Liste in Integer-Typ konvertieren ...

6
user4860969
string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();
4
Oybek

Wenn Sie C # 3.5 verwenden, können Sie dies mit Linq erreichen

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();

oder die kurze

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();
2
Agustin Meriles
string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
2
LiquidPony

Ich bin darauf gestoßen und möchte nur meine eigene Lösung ohne Linux teilen. Dies ist ein primitiver Ansatz. Nicht ganzzahlige Werte werden ebenfalls nicht in die Liste aufgenommen.

List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
    int val = 0;
    if (int.TryParse(item, out val) == true)
    {
        TagIds.Add(val);
    }
}

Hoffe das hilft.

1
drchanix

Ich habe die Antwort von khalid13 geändert. Wenn der Benutzer eine Zeichenfolge von "0" eingibt, wird diese durch seine Antwort aus der resultierenden Liste entfernt. Ich habe etwas Ähnliches gemacht, aber ein anonymes Objekt verwendet.

var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
            .Where(w => w.didConvert)
            .Select(s => s.convertedValue)
            .ToList();

TrimNullProtection ist eine benutzerdefinierte Funktion, die schützt, wenn die Zeichenfolge null ist.

Mit den obigen Schritten werden alle Zeichenfolgen entfernt, die nicht fehlerfrei konvertiert werden konnten. Wenn bei der Konvertierung ein Fehler aufgetreten ist, sollte die akzeptierte Antwort den Trick ausführen.

1
SolidSnake4444

Es ist einfach. Teilen Sie zuerst die Zeichenfolge. Leerzeichen nach Komma (,) entfernen. Dann benutze systemdefinierte ToList ()

string TradeTypeEnum = "Physical Deal, Physical Concentrate"

Um das Leerzeichen nach ',' zu entfernen und diesen durch Kommas getrennten Text in List umzuwandeln

List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();
0
Parag555