Dividi stringa, converti ToList <int> () in una riga


192

Ho una stringa che ha numeri

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

Posso dividerlo e convertirlo in List<int>

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

Come posso convertire un array di stringhe in un numero intero? In modo che sarò in grado di convertire string[]inIEnumerable


Oggi abbiamo avuto esattamente la stessa domanda: cliccami
Dario,

3
in "una riga" è un requisito molto forte! </perl>
dfa,

2
Questa domanda dice specificamente di dividere una stringa di numeri, il che rende semplice la risposta. La domanda che Dario ha menzionato gestisce (impantana?) I problemi di TryParse per le stringhe generali.
arrivederci,

Risposte:



31

Puoi anche farlo in questo modo senza la necessità di Linq:

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

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

18

Anche il modo di Joze ha bisogno di LINQ, ToList()è nello System.Linqspazio dei nomi.

È possibile convertire l'array in elenco senza Linq passando l'array al costruttore Elenco:

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

18

Migliore utilizzo int.TryParseper evitare eccezioni;

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

10

È anche possibile int array per indirizzare il valore di assegnazione.

come questo

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

4

inoltre è possibile utilizzare questo metodo di estensione

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

utilizzo:

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

3

Su Unity3d, int.Parsenon funziona bene. Quindi uso come muggito.

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

Spero che questo aiuto per gli utenti Unity3d.


3

È possibile utilizzare le nuove funzionalità del linguaggio C # 6.0:

  • sostituire il delegato (s) => { return Convert.ToInt32(s); }con il gruppo di metodi corrispondenteConvert.ToInt32
  • sostituire la chiamata del costruttore ridondante: new Converter<string, int>(Convert.ToInt32)con:Convert.ToInt32

Il risultato sarà:

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

2

Il mio problema era simile ma con l'inconveniente che a volte la stringa contiene lettere (a volte vuote).

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

Cercando di seguire il metodo di estensione 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(); 
}

1
Grazie, anche se dichiari un separatore e non lo usi.
Hugo Delsing,

-2

Puoi usare questo:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();

2
Benvenuto in Stack Overflow! Mentre questo frammento di codice può risolvere la domanda, inclusa una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e che queste persone potrebbero non conoscere i motivi del tuo suggerimento sul codice. Cerca inoltre di non aggiungere il tuo codice a commenti esplicativi, in quanto ciò riduce la leggibilità sia del codice che delle spiegazioni!
Arrivederci StackExchange

2
La funzione ConvertIntoIntList non viene chiusa.
Federico Navarrete,

Inoltre, è necessario aggiungere la seguente classe: classe pubblica statica HelperMethods {Elenco pubblico statico <int> ConvertIntoIntList (this string [] stringList) {int x = 0; var intList = stringList.Where (str => int. TryParse (str, out x)) .Select (str => x) .ToList (); return intList; }}
Federico Navarrete,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.