Feedback

C# - Beim Konvertieren von Int zu String Nullen davorhängen

Veröffentlicht von am 28.01.2014
(1 Bewertungen)
Dieses Snippet zeigt versch. möglichkeiten eine Zahl um eine gewisse Anzahl von Nullen davor (praktisch beim Sortieren) zu ergänzen. Die Anzahl wird anhand einer Liste mit weiteren Zahlen berechnet:
nNullen = nZeichen(GrößteZahlAusListe) - nZeichen(Zahl selber)
// Variante 1: von Koopakiller
// Hier wird einfach die gesamte Zeichenzahl übergeben
// dann kann sie einmal ermittelt werden und immer wieder an die Methode übergeben werden, was zahlreiche aufeinanderfolgende (und IDENTISCHE) LINQ-Aufrufe  vermeidet.
public static string ToSortableNumberString(this int number, int charCount)
{
    return number.ToString().PadLeft(charCount, '0')
}

// Variante 2: von schreini
public static string ToSortableNumberString (this int number, int charCount)
{
    return number.ToString("D" + charCount.ToString());
}

// Variante 3: WIE MAN'S NICHT MACHEN SOLLTE:
public static string ToSortableNumberString(this int number, List<int> otherNumbers)
{            
    string zeros = "";
    int countZeros = otherNumbers.Max().ToString().Length;
    countZeros = countZeros - number.ToString().Length;
    for (int i = 0; i < countZeros; i++)
        zeros += "0";
    return zeros + number.ToString();
}
Abgelegt unter Nulle, Zeros, Hinzufügen, Add.

4 Kommentare zum Snippet

Koopakiller schrieb am 28.01.2014:
Nimm nach dem ToString() einfach die PadLeft-Methode. So hast du deine Nullen und die Methode ist schneller ;)
otherNumbers könnte man auch über LINQ verarbeiten. (Einfach durch .Max() das Maximum ermitteln) Dadurch würde auch die Sortierung der Liste nicht verloren gehen.

Alternativ zur Liste könnte man auch ein params int[] otherNumbers nutzen.
schreini schrieb am 14.02.2014:
Sortiert die Sort() Methode nicht aufsteigen, so dass an erster Stelle in der Liste dann immer die kleinste Zahl steht?

Man kann auch mit 2.ToString("D3") einen int mit 3 Nullen Padden. =>> "002"

Ungetestet:

private string AddZeros(int number, List<int> otherNumbers)
{
if(otherNumbers.Count()==0)
return number;

int maxLen = otherNumbers.Max().ToString().Length;
return number.ToString("D" + maxLen);
}


Namensalternativen:
MakeSortable oder MakeSameLength oder ToSortableNumberString oder ToSameLengthNumberString

hth,
Thomas
Koopakiller schrieb am 14.02.2014:
Stimmt, Sort sortiert aufsteigend.
Wobei ich es auch so vermeiden würde, irgend eine LINQ-Methode für jeden Eintrag einzeln aufzurufen. Das frist nur Leistung, die bei vielen Einträgen in der Liste schnell knapp werden könnte.

So oder so wäre die Lösung von Thomas (soweit ich weiß bis 99 Stellen) oder meine effektiver.
dariusarnold schrieb am 15.02.2014:
Hey. Danke für die Hinweise.. Ich werd's oben ergänzen. :)
 

Logge dich ein, um hier zu kommentieren!