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


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();

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();

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) );

17

Besser verwenden int.TryParse, um Ausnahmen zu vermeiden;

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

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();

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(',');

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.


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));

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(); 
}

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();

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.