Как сравнить огромное количество строк за 2 или 3 минуты - PullRequest
0 голосов
/ 29 марта 2020

У меня есть два класса или массива. Класс А имеет стр1, стр2, стр3, стр4, стр5, стр6. Есть 200 000 А. Класс B имеет St1, St2, St3, St4, St5, St6. Есть 50 000 класса B. Если str1 = St1 и str2 = St2, то добавьте строку к Product, которая имеет str1, str2, str3, str4, str5, str6, St3, St4, St5, St6.

Самый простой способ - это иметь две петли, но на самом деле это занимает очень много времени, я выполнял его за 6-8 часов. Позже я попытался сделать то же самое в Excel. Я могу завершить через ~ 5 минут. Но иногда это имеет ошибку, если кто-то использует Excel. Поэтому я хочу знать, смогу ли я сделать это в коде без использования Excel.

 Dim Products As ObservableCollection(Of Product)
    Dim lstProducts As New List(Of Product)

    for i=0 to ClassA.count-1
    for j=0 to ClassB.count-1
    if ClassA.item(i).str1 = ClassB.item(j).St1 and ClassA.item(i).str2 = ClassB.item(j).St2
    then 
    Dim p As New Product(str1, str2, str3, str4, str5, str6, St3, St4, St5, St6)
else
     Dim p As New Product(str1, str2, str3, str4, str5, str6, "", "", "", "")
    lstProducts.Add(p)
    end if
    next j
    next i

    Products = New ObservableCollection(Of Product)(lstProducts)

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Вы могли бы сделать пару вещей. Вы можете вызвать GetHashCode для всех этих строк (сделать это только один раз для каждого сильного и сохранить его где-нибудь). Затем сравните эти сети вместо строк.

Второе, что вы можете сделать, это создать словарь, в котором в качестве ключа будет храниться вся строка 1. Затем l oop через ClassB находим где dict.ContainKey (b.str1), а затем сравниваем вторую строку.

0 голосов
/ 29 марта 2020

Для ClassB создайте Dictionary, где ключ - это пара: (St1, St2), а значения - это списки элементов из ClassB. Для каждого (St1, St2) хранятся все элементы из ClassB, которые имеют эти St1 и St2. Теперь вам нужно просто перебрать ClassA, и, используя словарь, вы можете быстро найти соответствующие элементы из ClassB.

Время выполнения линейно зависит от размера ввода и вывода.

Извините, я не знаю VB, поэтому не могу написать код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...