Dividir cadena, convertir ToList <int> () en una línea


191

Tengo una cadena que tiene números

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

Puedo dividirlo y luego convertirlo a List<int>

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

¿Cómo puedo convertir una matriz de cadenas a una lista entera? Para poder convertir string[]aIEnumerable


Hemos tenido exactamente la misma pregunta hoy: Click me
Darío

3
en "una línea" si una muy fuerte es un requisito muy estricto! </perl>
dfa

2
Esta pregunta dice específicamente dividir una cadena de números, lo que mantiene la respuesta simple. La pregunta que Dario mencionó trata los problemas de TryParse para cadenas generales.
goodeye

Respuestas:


463
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();

44
Esto obtiene una excepción cuando la lista tiene un valor vacío o nulo.
Sayed Muhammad Idrees

@ SayedM.Idrees simplemente marque nulo o vacío antes de dividir.
RAVI VAGHELA

31

También puede hacerlo de esta manera sin la necesidad de 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

La forma de Joze también necesita LINQ, ToList()está en el System.Linqespacio de nombres.

Puede convertir Array a List sin Linq pasando la matriz a List constructor:

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

17

Mejor uso int.TryParsepara evitar excepciones;

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

10

También es posible int array para asignar directamente el valor.

Me gusta esto

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

4

También puedes usar este método de extensión

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

uso:

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

3

En Unity3d, int.Parseno funciona bien. Entonces uso como abajo.

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

Espero esta ayuda para los usuarios de Unity3d.


3

Puede usar las nuevas características del lenguaje C # 6.0:

  • reemplazar delegado (s) => { return Convert.ToInt32(s); }con el grupo de métodos correspondienteConvert.ToInt32
  • reemplace la llamada de constructor redundante: new Converter<string, int>(Convert.ToInt32)con:Convert.ToInt32

El resultado será:

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

2

Mi problema era similar pero con el inconveniente de que a veces la cadena contiene letras (a veces vacías).

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

Intentando seguir el método de extensión 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
Gracias, aunque declaras un separador y luego no lo usas.
Hugo Delsing

-2

Puedes usar esto:

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

2
¡Bienvenido a Stack Overflow! Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y que esas personas podrían no conocer los motivos de su sugerencia de código. ¡Intente también no saturar su código con comentarios explicativos, ya que esto reduce la legibilidad tanto del código como de las explicaciones!
Goodbye StackExchange el

2
La función ConvertIntoIntList no existe.
Federico Navarrete

Además, debe agregar la siguiente clase: clase pública estática HelperMethods {Lista pública estática <int> ConvertIntoIntList (esta cadena [] stringList) {int x = 0; var intList = stringList.Where (str => int. TryParse (str, out x)) .Select (str => x) .ToList (); volver intList; }}
Federico Navarrete
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.