Dire che ho 12345.Come dividere un numero in singole cifre in C#?
Vorrei singoli articoli per ogni numero. Una stringa farebbe o anche un numero individuale.
Il metodo .Split ha un sovraccarico per questo?
Dire che ho 12345.Come dividere un numero in singole cifre in C#?
Vorrei singoli articoli per ogni numero. Una stringa farebbe o anche un numero individuale.
Il metodo .Split ha un sovraccarico per questo?
Qualcosa di simile a questo lavoro, utilizzando Linq:
string result = "12345"
var intList = result.Select(digit => int.Parse(digit.ToString()));
Questo vi darà una lista di int IEnumerable.
Se si desidera un IEnumerable di stringhe:
var intList = result.Select(digit => digit.ToString());
Beh, una stringa è un IEnumerable e implementa anche un indicizzatore, in modo da poter scorrere attraverso di essa o fare riferimento ogni carattere della stringa in base all'indice.
Il modo più veloce per ottenere ciò che si vuole è probabilmente il metodo ToCharArray() di una stringa:
var myString = "12345";
var charArray = myString.ToCharArray(); //{'1','2','3','4','5'}
è quindi possibile convertire ogni Char in una stringa, o analizzare in byte o interi. Ecco un modo Linq-y per farlo:
byte[] byteArray = myString.ToCharArray().Select(c=>byte.Parse(c.ToString())).ToArray();
Un po 'più performante se si sta utilizzando le stringhe ASCII/Unicode:
byte[] byteArray = myString.ToCharArray().Select(c=>(byte)c - 30).ToArray();
Questo codice funziona solo se si è sicuri che ogni l'elemento è un numero; altrimenti l'analisi genererà un'eccezione. Un semplice Regex che verificherà che questo è vero è "^ \ d + $" (corrisponde a una stringa completa costituita da uno o più caratteri numerici), utilizzata nel metodo statico Regex.IsMatch().
Ecco un codice che potrebbe aiutarti. Le stringhe possono essere trattati come un array di caratteri
string numbers = "12345";
int[] intArray = new int[numbers.Length];
for (int i=0; i < numbers.Length; i++)
{
intArray[i] = int.Parse(numbers[i]);
}
La penultima riga indica un errore. Non includere '[i]' con i 'numeri'. –
Si può semplicemente fare:
"123456".Select(q => new string(q,1)).ToArray();
per avere un enumerabile di interi, secondo la richiesta commento, è possibile:
"123456".Select(q => int.Parse(new string(q,1))).ToArray();
È un po 'debole poiché presuppone che la stringa contenga effettivamente dei numeri.
Non restituisce qualcosa di 'IEnumerable
Vorrei usare modulo e un ciclo.
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();
}
È un bel modo per farlo. Ma escluderà lo zero iniziale, vale a dire ** 0 ** 123. Nel caso in cui ho bisogno di iniziare ** 0 ** pure. Come fare? –
@SaimMehmoodnon è un numero –
0 è un numero ma sarà escluso :) fa ... mentre farebbe il trucco – Tommy
I metodi di sottostringa e unione sono utilizzabili per questa dichiarazione.
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) !? Senso. Non ne ha. – dtb
@Randy, hai modificato la tua risposta? Era corretto prima, ora è sbagliato. Ciò restituirà un 'IEnumerable' di' string'. (Ho appena cambiato di nuovo) –
@dtb, qual è la confusione? 'digit' è un' char', e 'int.Parse' prende una' stringa'. Quindi: 'digit.ToString()'. –