39 Stimmen

Wie kann man in c# eine Zahl in einzelne Ziffern aufteilen?

Sagen wir, ich habe 12345.

Ich möchte für jede Nummer einen eigenen Artikel. Eine Zeichenkette oder sogar eine einzelne Nummer wäre gut.

Verfügt die Methode .Split über eine Überladung für diese Funktion?

69voto

Biff MaGriff Punkte 7991

Ich würde Modulus und eine Schleife verwenden.

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

35voto

Randy Minder Punkte 45277

Etwas wie dies wird funktionieren, mit Linq:

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

Dadurch erhalten Sie eine IEnumerable-Liste von ints.

Wenn Sie eine IEnumerable von Zeichenfolgen möchten:

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

oder wenn Sie eine Liste von Zeichenfolgen wünschen:

var intList = result.ToList();

11voto

KeithS Punkte 67713

Nun, ein String ist ein IEnumerable und implementiert auch einen Indexer, so dass Sie durch ihn iterieren oder jedes Zeichen in der Zeichenfolge durch Index verweisen können.

Der schnellste Weg, das Gewünschte zu erhalten, ist wahrscheinlich die Methode ToCharArray() eines Strings:

var myString = "12345";

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

Sie können dann jedes Char in eine Zeichenkette umwandeln oder sie in Bytes oder Integer parsen. Hier ist ein Linq-y Weg, das zu tun:

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

Ein wenig leistungsfähiger, wenn Sie ASCII/Unicode-Strings verwenden:

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

Dieser Code funktioniert nur, wenn Sie SICHER sind, dass jedes Element eine Zahl ist; andernfalls wird beim Parsen eine Ausnahme ausgelöst. Eine einfache Regex, die dies verifiziert, ist "^ \d +$" (entspricht einer vollständigen Zeichenkette, die aus einem oder mehreren Ziffernzeichen besteht), verwendet in der statischen Methode Regex.IsMatch().

7voto

Felice Pollano Punkte 32046

Das können Sie einfach tun:

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

um eine Aufzählung von ganzen Zahlen zu haben, wie es in den Kommentaren gefordert wird, können Sie:

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

Es ist ein wenig schwach, da es davon ausgeht, dass die Zeichenfolge tatsächlich Zahlen enthält.

1voto

dparker Punkte 1082

Hier ist ein Code, der Ihnen weiterhelfen könnte. Zeichenketten können als ein Array von Zeichen behandelt werden

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X