web-dev-qa-db-fra.com

Comment diviser un nombre en chiffres individuels en c #?

Dis que j'ai 12345.

Je voudrais des articles individuels pour chaque numéro. Une chaîne ferait ou même un numéro individuel.

La méthode .Split a-t-elle une surcharge pour cela?

17
delete

J'utiliserais un module et une boucle.

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();
}
35
Biff MaGriff

Quelque chose comme cela fonctionnera avec Linq:

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

Cela vous donnera une liste IEnumerable d'ints.

Si vous voulez un IEnumerable de chaînes:

var intList = result.Select(digit => digit.ToString());
18
Randy Minder

Eh bien, une chaîne est un IEnumerable et implémente également un indexeur, vous pouvez donc effectuer une itération ou référencer chaque caractère de la chaîne par index.

Le moyen le plus rapide d'obtenir ce que vous voulez est probablement la méthode ToCharArray () d'une chaîne:

var myString = "12345";

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

Vous pouvez ensuite convertir chaque caractère en chaîne ou les analyser en octets ou en nombres entiers. Voici un moyen Linq-y de le faire:

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

Un peu plus performant si vous utilisez des chaînes ASCII/Unicode:

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

Ce code ne fonctionnera que si vous êtes SÛR que chaque élément est un nombre. Sinon, l'analyse lancera une exception. "^\D + $" (qui correspond à une chaîne complète composée d'un ou de plusieurs caractères numériques), utilisé dans la méthode statique Regex.IsMatch (), est un exemple simple de regex qui vérifiera que cela est vrai.

8
KeithS

Vous pouvez simplement faire:

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

pour avoir un nombre énumérable d'entiers, selon la demande de commentaire, vous pouvez:

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

Il est un peu faible car il suppose que la chaîne contient des nombres.

6
Felice Pollano

Les méthodes Substring et Join sont utilisables pour cette instruction.

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
1
Umut D.

Voici un code qui pourrait vous aider. Les chaînes peuvent être traitées comme un tableau de caractères

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