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)
GFU-Schulungen  [Anzeige]

ASP.NET 2.0 und 3.5

Dieser Kurs vermittelt Ihnen alle Erweiterungen von Microsoft ASP.NET 2.0. Zu diesen zählen u. a. Data Bindung, Master Pages, und Security.

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

// 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!