Digamos que tengo 12345.¿Cómo dividir un número en dígitos individuales en C#?
Me gustaría tener artículos individuales para cada número. Una cadena haría o incluso un número individual.
¿El método .Split tiene una sobrecarga para esto?
Digamos que tengo 12345.¿Cómo dividir un número en dígitos individuales en C#?
Me gustaría tener artículos individuales para cada número. Una cadena haría o incluso un número individual.
¿El método .Split tiene una sobrecarga para esto?
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());
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().
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]);
}
La penúltima línea da un error. No incluya '[i]' con los 'números'. –
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.
No devuelve algo de 'IEnumerable
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();
}
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? –
@SaimMehmoodno es un número –
0 es un número, pero se excluirá :) do ... mientras que haría el truco – Tommy
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
.Parse (.ToString) !? Sentido. No hace ninguno. – dtb
@Randy, ¿ha modificado su respuesta? Era correcto antes, ahora está mal. Esto devolverá un 'IEnumerable' de' string'. (Lo acabo de cambiar) –
@dtb, ¿cuál es la confusión? 'digit' es un' char', y 'int.Parse' toma' string'. Por lo tanto: 'digit.ToString()'. –