2011-01-26 146 views

Respuesta

17

Algo como esto va a funcionar, usando LINQ:

string result = "12345" 
var intList = result.Select(digit => int.Parse(digit.ToString())); 

esto le dará una lista de enteros IEnumerable.

Si desea un IEnumerable de cadenas:

var intList = result.Select(digit => digit.ToString()); 
+6

.Parse (.ToString) !? Sentido. No hace ninguno. – dtb

+0

@Randy, ¿ha modificado su respuesta? Era correcto antes, ahora está mal. Esto devolverá un 'IEnumerable' de' string'. (Lo acabo de cambiar) –

+3

@dtb, ¿cuál es la confusión? 'digit' es un' char', y 'int.Parse' toma' string'. Por lo tanto: 'digit.ToString()'. –

7

Bueno, una cadena es un IEnumerable y también implementa un controlador paso a paso, por lo que puede iterar a través de él o hacer referencia a cada carácter de la cadena por el índice.

La manera más rápida de obtener lo que desea es probablemente el método ToCharArray() de una cadena:

var myString = "12345"; 

var charArray = myString.ToCharArray(); //{'1','2','3','4','5'} 

entonces usted puede convertir cada Char en una cadena, o analizarlos en bytes o enteros. Aquí está una manera LINQ-y para hacer eso:

byte[] byteArray = myString.ToCharArray().Select(c=>byte.Parse(c.ToString())).ToArray(); 

Un poco más performante si está utilizando cadenas de caracteres ASCII/Unicode:

byte[] byteArray = myString.ToCharArray().Select(c=>(byte)c - 30).ToArray(); 

Ese código sólo funcionará si está seguro de que cada elemento es un número; de lo contrario, el análisis arrojará una excepción. Un Regex simple que verificará que esto es cierto es "^ \ d + $" (coincide con una cadena completa que consta de uno o más caracteres de dígitos), que se utiliza en el método estático Regex.IsMatch().

1

Aquí hay algunos códigos que pueden serle útiles. Las cadenas pueden ser tratados como un array de caracteres

string numbers = "12345"; 
int[] intArray = new int[numbers.Length]; 
for (int i=0; i < numbers.Length; i++) 
{ 
    intArray[i] = int.Parse(numbers[i]); 
} 
+0

La penúltima línea da un error. No incluya '[i]' con los 'números'. –

5

Simplemente puede hacer:

"123456".Select(q => new string(q,1)).ToArray(); 

para tener una numerable de números enteros, según la petición de comentario, puede:

"123456".Select(q => int.Parse(new string(q,1))).ToArray(); 

Es un poco débil ya que supone que la cadena realmente contiene números.

+0

No devuelve algo de 'IEnumerable ' (o equivalente). –

33

Yo usaría módulo y un bucle.

int[] GetIntArray(int num) 
{ 
    List<int> listOfInts = new List<int>(); 
    while(num > 0) 
    { 
     listOfInts.Add(num % 10); 
     num = num/10; 
    } 
    listOfInts.Reverse(); 
    return listOfInts.ToArray(); 
} 
+0

Esa es una buena manera de hacerlo. Pero excluirá el cero inicial, es decir, ** 0 ** 123. En caso de que requiera comenzar ** 0 ** también. ¿Cómo hacerlo? –

+2

@SaimMehmoodno es un número –

+0

0 es un número, pero se excluirá :) do ... mientras que haría el truco – Tommy

1

Los métodos de subcadena y unión se pueden utilizar para esta afirmación.

string no = "12345"; 
string [] numberArray = new string[no.Length]; 
int counter = 0; 

    for (int i = 0; i < no.Length; i++) 
    { 
    numberArray[i] = no.Substring(counter, 1); // 1 is split length 
    counter++; 
    } 

Console.WriteLine(string.Join(" ", numberArray)); //output >>> 0 1 2 3 4 5 
Cuestiones relacionadas