Hier ist eine Möglichkeit, über einen Algorithmus zum Generieren dieser Ausgabe nachzudenken:
- Split das Array auf (
,
) eine Liste von Namen zu erzeugen
- Split jeder Name in first-letzte Paare um den Raum
- Gruppe, die Namen in passende Vorname Gruppen
- Für jede Gruppe mit einem Namen (kein Duplikat Vorname), Ausgang zuerst nur nennen
- Für jede Gruppe mehr passenden Vornamen hat, Ausgang Vornamen plus letzten Anfang
diesen Prozess kann LINQ getan werden, mit der Spaltung und die Gruppe zu tun ing, und dann mit einem temporären Array einer Schleife, um die endgültigen Ergebnisse in der ursprünglichen Reihenfolge zu speichern, etwa so:
string s = "Alex Amonov,Semen Polov,John S,Alex Solid";
// split original list into separate names
var names = s.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
// split names into first-last pairs, and group by matching first names groups,
// preserving information about original order/index
var nameGroups = names.Select((n, i) => Tuple.Create(i, n.Split(' '))).GroupBy(n => n.Item2[0]).ToList();
// prepare output array to store final names in original order
var result = new string[names.Length];
foreach (var nameGroup in nameGroups)
{
// if only one matching first name in group, output just the first name
if (nameGroup.Count() == 1)
{
result[nameGroup.Single().Item1] = nameGroup.Single().Item2[0];
}
else
{
// if multiple matching names, include first letter of last name
foreach (var entry in nameGroup)
{
result[entry.Item1] = entry.Item2[0] + " " + entry.Item2[1][0];
}
}
}
// generate output comma-separated list of final output names in original order
var output = string.Join(" , ", result);
Console.WriteLine(output); // Alex A , Semen , John , Alex S
Es offensichtlich ein Nachteil dieser Lösung ist, wie durch @Kaz in den Kommentaren darauf hingewiesen. Wenn zwei Namen denselben Anfangsbuchstaben haben, sind sie immer noch Duplikate in der Ausgabe. In diesem Fall nehme ich an, dass es geändert werden könnte, um den vollständigen Nachnamen auszugeben.
Was ist, wenn es Alex Smith und Alex Solid gibt? – Kaz
Warum wird Alex Solid in Ihrem erwarteten Ergebnis zu Alex S und nicht einfach zu Alex? – Szeki
'Wie kann ich das tun?' Obwohl es wie eine Frage scheint, ist es nicht. Es ist einfach "schreibe es für mich?". Was hast du probiert? Was ist falsch gelaufen? – Eser