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
Eingabe | Ausgabe |
Ap7fel h2abe Ic1h un4d Hung3er 5möchte ein6 | Ic1h 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(""));
}