Что является наиболее эффективным способом удаления дубликатов в IList
в C# без Linq
Удаление дубликатов без Linq для IList из IList
У меня есть следующий код от другого SO [1],
IList<IList<int>> output = new List<IList<int>>();
var lists = output;
for (int i = 0; i < lists.Count; ++i)
{
//since we want to compare sequecnes, we shall ensure the same order of the items
var item = lists[i].OrderBy(x => x).ToArray();
for (int j = lists.Count - 1; j > i; --j)
if (item.SequenceEqual(lists[j].OrderBy(x => x)))
lists.RemoveAt(j);
}
Я использую это в более сложной задаче кодирования и без Linq или синтаксических сахаров, я пытаюсь понять, есть ли какое-нибудь элегантное/быстрое решение?
Я думаю, что просто использую Hash, но я не уверен, какую функцию Hashing использовать для определения того, что List уже доступен?
Более четко Для входа как
{{1,2,4, 4}, {3,4,5}, {4,2,1,4} }
Промежуточный Выход [Сортировано вход/выход отлично]
{{1,2,4,4}, {3,4,5}, {1,2,4,4} }
Выход:
{{1,2,4,4}, {3,4,5}}
HashSet имеет метод 'SetEquals', который будет проверять два набора намного быстрее, но тогда вы косяк дублируются номера внутри HashSet. это проблема? –
@ M.kazemAkhgary Мои списки внутри могут содержать дубликаты, я отредактировал образец сейчас – Dexters
его действительно трудно без Linq, я думал, это группировать числа, а затем класть ключи со своими значениями внутри словаря, чтобы обеспечить быструю проверку номеров, которые будут использовать гораздо больше места, но это будет намного быстрее. –