Podziel ciąg, przekonwertuj ToList <int> () w jednym wierszu

191

Mam ciąg, który ma liczby

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

Mogę go podzielić, a następnie przekonwertować na List<int>

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

Jak przekonwertować tablicę ciągów na listę liczb całkowitych? Tak, że będę mógł przekonwertować string[]naIEnumerable

uzay95
źródło
Mieliśmy dzisiaj dokładnie to samo pytanie: kliknij mnie
Dario
3
w „jednej linii” bardzo silna jest bardzo rygorystyczny wymóg! </perl>
dfa
2
To pytanie konkretnie mówi o podzieleniu ciągu liczb, dzięki czemu odpowiedź jest prosta. Pytanie, w którym Dario wspomniał o problemach TryParse (torfowiska w?) Dla ogólnych ciągów znaków.
goodeye,

Odpowiedzi:

464
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
mqp
źródło
4
Otrzymuje wyjątek, gdy lista ma pustą wartość lub jest pusta.
Sayed Muhammad Idrees
@ SayedM.Idrees po prostu zaznacz zerowy lub pusty przed podziałem.
RAVI VAGHELA
31

Możesz to zrobić w ten sposób bez potrzeby korzystania z Linq:

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

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();
Joze
źródło
18

Sposób Joze również wymaga LINQ, ToList()jest w System.Linqprzestrzeni nazw.

Możesz przekonwertować Array na List bez Linq, przekazując tablicę do konstruktora List:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
Yuxio
źródło
17

Lepsze wykorzystanie, int.TryParseaby uniknąć wyjątków;

var numbers = sNumbers
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList();
aozogul
źródło
10

Możliwe jest również int int tablica, aby bezpośrednio przypisać wartość.

lubię to

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();
Mukesh Kalgude
źródło
4

możesz także użyć tej metody rozszerzenia

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

stosowanie:

var numberListString = "1, 2, 3, 4";
List<int> numberList = numberListString.SplitToIntList(',');
Pcodea Xonos
źródło
3

Na Unity3d int.Parsenie działa dobrze. Więc używam jak poniżej.

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

Mam nadzieję, że ta pomoc dla użytkowników Unity3d.

HyoJin KIM
źródło
3

Możesz użyć nowych funkcji języka C # 6.0:

  • zastąp delegata (s) => { return Convert.ToInt32(s); }odpowiednią grupą metodConvert.ToInt32
  • zastąp zbędne wywołanie konstruktora new Converter<string, int>(Convert.ToInt32):Convert.ToInt32

Wynik będzie:

var intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), Convert.ToInt32));
Adrian Filip
źródło
2

Mój problem był podobny, ale z tą niedogodnością, że czasami łańcuch zawiera litery (czasem puste).

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

Próbując zastosować metodę rozszerzenia Pcode Xonos:

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
źródło
1
Dzięki, mimo że deklarujesz separator, a następnie go nie używasz.
Hugo Delsing
-2

Możesz użyć tego:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();
Charanjot
źródło
2
Witamy w Stack Overflow! Ten fragment kodu może rozwiązać pytanie, ale wyjaśnienie naprawdę pomaga poprawić jakość posta. Pamiętaj, że w przyszłości odpowiadasz na pytanie czytelników, a ci ludzie mogą nie znać przyczyn Twojej sugestii kodu. Staraj się również nie tłoczyć kodu objaśniającymi komentarzami, ponieważ zmniejsza to czytelność zarówno kodu, jak i objaśnień!
Do widzenia StackExchange
2
Funkcja ConvertIntoIntList nie wychodzi.
Federico Navarrete,
Ponadto należy dodać następującą klasę: static public class HelperMethods {static public List <int> ConvertIntoIntList (ten ciąg [] stringList) {int x = 0; var intList = stringList.Where (str => int.TryParse (str, out x)). Wybierz (str => x) .ToList (); return intList; }}
Federico Navarrete,