У меня есть список имен, как показано ниже, я хочу реализовать пользовательский порядок, реализовав IComparer<T>
. Эта пользовательская сортировка должна проверять имена двух элементов, и если они совпадают, она должна объединять их. Так, например, окончательный результат будет
John Locke
John Doe
Elizabeth Davis
Elizabeth Hurley
Ashley Williams
Я не хочу менять порядок списка по имени, я просто хочу собрать вместе те, у кого одинаковое имя, но разные фамилии.
class Program
{
static void Main(string[] args)
{
List<Name> names = new List<Name>
{
new Name {FirstName = "John", LastName = "Locke"},
new Name {FirstName = "Elizabeth", LastName = "Davis"},
new Name {FirstName = "John", LastName = "Doe"},
new Name {FirstName = "Ashley", LastName = "Williams"},
new Name {FirstName = "Elizabeth", LastName = "Hurley"}
};
foreach (Name name in names)
{
Console.WriteLine($"{name.FirstName, -10} {name.LastName, -10}");
}
Console.WriteLine("\n\n");
List<Name> sorted = names.OrderBy(o => o, new NameComparer()).ToList();
foreach (Name name in sorted)
{
Console.WriteLine($"{name.FirstName,-10} {name.LastName,-10}");
}
Console.ReadKey();
}
}
public sealed class Name
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public sealed class NameComparer : IComparer<Name>
{
public int Compare(Name x, Name y)
{
}
}
names.OrderBy(x => x.FirstName).ThenBy(x => x.LastName).ToList();
? - person George Kerwood   schedule 27.05.2020IComparer<T>
:) - person George Kerwood   schedule 27.05.2020return x.FirstName == y.FirstName ? 0 : -1;
Это все, что тебе нужно вCompare(Name x, Name y)
- person George Kerwood   schedule 27.05.2020FirstName
. - person George Kerwood   schedule 27.05.2020