C#: Sortiere die Wörter im String anhand ihrer enthaltenen Zahl

Vorgaben

  • Der String enthält verschiedene Wörter, getrennt durch ein Leerzeichen, welche richtig sortiert einen Satz ergeben
  • Jedes Wort hat an beliebiger Stelle eine Zahl, welche die Position im Satz angibt
  • Wenn der Eingabe-String leer ist, gibt die Funktion einen leeren String zurück
  • Der Eingabe-String enthält nur gültige Werte

Beispiel

EingabeAusgabe
Ap7fel h2abe Ic1h un4d Hung3er 5möchte ein6Ic1h h2abe Hung3er un4d 5möchte ein6 Ap7fel

Meine erste Lösung

public static string OrderWordsByNumber2(string words)
{
    if (string.IsNullOrWhiteSpace(words)) return string.Empty;

    return String.Join(" ", words.Split(" ")
        .Select(x => new { word = x, pos = x.First(v => Char.IsDigit(v)) })
        .OrderBy(x => x.pos)
        .Select(x => x.word));
}

Meine zweite optimierte Lösung

public static string OrderWordsByNumber(string words)
{
    if (string.IsNullOrWhiteSpace(words)) return string.Empty;
    return String.Join(" ", words.Split(" ")
        .OrderBy(x => x.ToList().First(v => Char.IsDigit(v))));        }
}

Unit-Test

[Test]
public void DuplicateCountTest()
{
    Assert.AreEqual("1Das is2t ei3ne spannend4e Aufgabe5",
        Snippets.OrderWordsByNumber("Aufgabe5 1Das ei3ne is2t spannend4e"));
    Assert.AreEqual("Ic1h h2abe Hung3er un4d 5möchte ein6 Ap7fel",
        Snippets.OrderWordsByNumber("Ap7fel h2abe Ic1h un4d Hung3er 5möchte ein6"));
    Assert.AreEqual("", Snippets.OrderWordsByNumber(""));
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.