Поиск и сравнение дублей

baracuda

Client
Регистрация
19.06.2013
Сообщения
792
Благодарностей
277
Баллы
63
господа. есть список (10-100к значений) отсортированный (можно не сортировать). Формат можно тоже сделать любой.
всё дело в цифрах. весь форум усыпан как удалить дубли, а у меня задача на оборот. даже не так 2 задачи. первая задача — это найти точные дубли (555), вторая задача близкие значения (555,554 не более 1% разницы, а может и 0.1%, надо смотреть в маштабе)
в дальнейшем я буду формировать что-то для себя красивого отчёта. наверное в экселе, пока не решил. но пока что то второй день изучаю форум. не попадается решение. каждую строку сверять со всем списком. 100к не долго ли будет процесс? с памятью тоже непонятно, хватит ли ?

Список прилагаю.
928347|мама
918271|мыла
873|раму
743|папа
743|строгал
555|елка
555|авто
555|кран
554|опера
321|дом
23|ключ
15|ручка
1|буй
и.т.д.
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
330
Благодарностей
243
Баллы
43
Возможно это код подойдёт для поиска точных дублей:

C#:
//Исходный список
var zl = project.Lists["s1"];


//Результирующая таблица
var zt = project.Tables["t1"];
zt.Clear();

Dictionary<string,List<string>> dubli = new Dictionary<string,List<string>> {};


zl.ToList().ForEach( item => {
    string[] itemA = item.Split('|').ToArray();
      if(dubli.ContainsKey(itemA[0])){
           dubli[itemA[0]].Add(itemA[1]);
      }
      else
      {
          dubli.Add( itemA[0], new List<string> { itemA[1] } );
      }
});

for(int i = 0; i < dubli.Count; i++){
  List<string> tozt = new List<string> { dubli.ElementAt(i).Key };
    tozt.AddRange(dubli.ElementAt(i).Value);
  zt.AddRow(tozt);
}
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)