Zeichenfolge teilen, ToList <int> () in eine Zeile konvertieren

191

Ich habe eine Zeichenfolge mit Zahlen

string sNumbers = "1,2,3,4,5";

Ich kann es teilen und dann in konvertieren List<int>

sNumbers.Split( new[] { ',' } ).ToList<int>();

Wie kann ich ein String-Array in eine Integer-Liste konvertieren? Damit ich werde in der Lage sein , konvertieren string[]zuIEnumerable

uzay95
quelle
Wir hatten heute genau die gleiche Frage: Click me
Dario
3
in "one line" si ist eine sehr starke eine sehr strenge Anforderung! </ perl>
dfa
2
Diese Frage besagt speziell, dass eine Folge von Zahlen geteilt werden soll, was die Antwort einfach hält. Die Frage, die Dario erwähnte, behandelt Probleme von TryParse für allgemeine Zeichenfolgen.
Goodeye

Antworten:

463
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
mqp
quelle
4
Dies führt zu einer Ausnahme, wenn die Liste einen leeren Wert oder null hat.
Sayed Muhammad Idrees
@ SayedM.Idrees überprüfen Sie einfach null oder leer, bevor Sie teilen.
RAVI VAGHELA
31

Sie können dies auch ohne Linq tun:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();
Joze
quelle
18

Joze's Weg braucht auch LINQ, ToList()ist im System.LinqNamespace.

Sie können das Array ohne Linq in List konvertieren, indem Sie das Array an den List-Konstruktor übergeben:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
yuxio
quelle
17

Besser verwenden int.TryParse, um Ausnahmen zu vermeiden;

var numbers = sNumbers
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList();
Aozogul
quelle
10

Es ist auch möglich, ein Array zu erstellen, um den Wert direkt zuzuweisen.

so was

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();
Mukesh Kalgude
quelle
4

Sie können diese Erweiterungsmethode auch verwenden

public static List<int> SplitToIntList(this string list, char separator = ',')
{
    return list.Split(separator).Select(Int32.Parse).ToList();
}

Verwendung:

var numberListString = "1, 2, 3, 4";
List<int> numberList = numberListString.SplitToIntList(',');
Pcodea Xonos
quelle
3

Funktioniert auf Unity3d int.Parsenicht gut. Also benutze ich wie unten.

List<int> intList = new List<int>( Array.ConvertAll(sNumbers.Split(','),
 new Converter<string, int>((s)=>{return Convert.ToInt32(s);}) ) );

Hoffe diese Hilfe für Unity3d Benutzer.

HyoJin KIM
quelle
3

Sie können neue C # 6.0-Sprachfunktionen verwenden:

  • Ersetzen Sie den Delegaten (s) => { return Convert.ToInt32(s); }durch die entsprechende MethodengruppeConvert.ToInt32
  • Ersetzen Sie den redundanten Konstruktoraufruf new Converter<string, int>(Convert.ToInt32)durch:Convert.ToInt32

Das Ergebnis wird sein:

var intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), Convert.ToInt32));
Adrian Filip
quelle
2

Mein Problem war ähnlich, aber mit der Unannehmlichkeit, dass die Zeichenfolge manchmal Buchstaben enthält (manchmal leer).

string sNumbers = "1,2,hh,3,4,x,5";

Versuch, der Pcode Xonos-Erweiterungsmethode zu folgen:

public static List<int> SplitToIntList(this string list, char separator = ',')
{
      int result = 0;
      return (from s in list.Split(',')
              let isint = int.TryParse(s, out result)
              let val = result
              where isint
              select val).ToList(); 
}
Carlos Toledo
quelle
1
Vielen Dank, obwohl Sie ein Trennzeichen deklarieren und es dann nicht verwenden.
Hugo Delsing
-2

Sie können dies verwenden:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();
Charanjot
quelle
2
Willkommen bei Stack Overflow! Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage in Zukunft für Leser beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch, Ihren Code nicht mit erklärenden Kommentaren zu überfüllen, da dies die Lesbarkeit sowohl des Codes als auch der Erklärungen beeinträchtigt!
Auf Wiedersehen StackExchange
2
Die Funktion ConvertIntoIntList wird nicht beendet.
Federico Navarrete
Außerdem müssen Sie die folgende Klasse hinzufügen: static public class HelperMethods {static public List <int> ConvertIntoIntList (diese Zeichenfolge [] stringList) {int x = 0; var intList = stringList.Where (str => int.TryParse (str, out x)) .Select (str => x) .ToList (); return intList; }}
Federico Navarrete