У меня есть следующий массив:
Driver[] predictions = new Driver[6];
predictions[0] = new Driver(10, "Michael Schumacher");
predictions[1] = new Driver(10, "Michael Schumacher");
predictions[2] = new Driver(9, "Fernando Alonso");
predictions[3] = new Driver(8, "Jensen Button");
predictions[4] = new Driver(7, "Felipe Massa");
predictions[5] = new Driver(6, "Giancarlo Fisichella");
Я хочу получить все дубликаты - имя один раз, а затем позиции (указатели), где находятся дубликаты. Итак, в этом случае я хочу получить «Михаэля Шумахера» и позиции 1 и 2 (индекс 0 и 1).
Можно ли это сделать за один раз, или мне нужно рассмотреть другие варианты? Я только что прочитал на DotNetPearls, что IndexOf довольно медленный по сравнению с вашей собственной логикой.
var driversSelectedMoreThanOnceAndTheirPositions = predictions.Select((driver, index) => new { driver, index })
.GroupBy(item => item.driver.Name)
.Where(grp => grp.Count() > 1)
.ToDictionary(g => g.Key, g => g.Select(a => (a.index + 1)).ToList());