У меня есть 20 наборов из двух пар строк, каждая из которых может содержать от 1 до 5 символов.Большую часть времени они на самом деле являются целыми числами от 1 до 52 или иногда числом с плавающей запятой с одним десятичным знаком от 1 до 53 (например, 52,3 будет максимальным значением).В некоторых случаях используется символ больше или меньше и увеличивает максимальное количество символов до 5 (например,> 26,2).
Эти группы из 20 наборов будут сравниваться большое количество раз (порядка 25 тыс. Или около того, что означает ~ 500 тыс. Единичных сравнений, подобных приведенному ниже).Я предполагаю, что лучшим вариантом хранения будет строка, а не проверять ее каждый раз, чтобы увидеть, является ли она строкой, целым числом или с плавающей запятой (но если я ошибаюсь, исправьте меня)Строки могут быть спарены любым способом (например, в паре допускается дубликат)
Я покажу один набор из 20 в качестве примера:
- 12 13
- 13 14
Позволяет использовать буквы для их представления A, B, C и D, поэтому мы не упускаем из виду тот факт, что они являются строками, и посмотрим, какони сравнивают.A = 12, B = 13 и C = 14 ... в этом примере нет D, но могут быть и другие.
- AB
- BC
Теперь, когда мы видим это, мы можем экстраполировать до 10 возможных способов их сопоставления и до 3 возможных способов, которыми они не будут ... и в зависимости от того, как они делятся, один из7 значений возвращаются из словаря, коллекции или индекса, массива или чего-либо подобного.
- AA AA (совместно используйте оба, чтобы получить значение индекса 1)
- AAAB (доля 1, дважды получим значение индекса 2)
- AA BA (доля 1, дважды получим значение индекса 2)
- AB AA (доля 1, дважды получим значение индекса 2)
- AB BB (доля 2 вдвойне получает значение индекса 3)
- AB AB (доля 2 получает значение индекса 4)
- AB AC (доля 1 раз получает значение индекса 5)
- AB CA (доля 1 раз получить значение индекса 5)
9.AB BC (доля 2 раз получить значение индекса 6)
AB CB (поделиться 2-й раз получить значение индекса 6) AA BC (поделиться нет получить значение индекса 7) AB CD (поделиться нет получить значение индекса 7) AB CC (share none, получить значение индекса 7)
В приведенном выше примере 12,13 и 13,14 число девять в списке будет сравнительным результатом, и я бымне нужно получить значение индекса 6.
Если не учитывать, как я получаю значение индекса или как эти наборы подходят, я хочу сосредоточиться на логике, чтобы решить, какое значение индекса вернуть.Я попробовал большой вложенный If - Ifelse, и он был монументально медленным (порядка 7 часов для сравнения 500k).Я подумал, что следующим шагом будет создание вложенного выбора, который я покажу здесь:
For i = 0 To 20
Select Case A
Case B
Select Case A
Case C
Select Case A
Case D
'code to get AAAA index value 1
Case Else
'code to get AAAB index value 2
End Select
Case Else
Select Case A
Case D
'code to get AABA index value 2
Case Else
'code to get AABC index value 7
End Select
End Select
Case Else
Select Case A
Case C
Select Case A
Case D
'code to get ABAA index value 2
Case Else
Select Case B
Case D
'code to get ABAB index value 4
Case Else
'code to get ABAC index value 5
End Select
End Select
Case Else
Select Case B
Case C
Select Case B
Case D
'code to get ABBB index value 3
Case Else
'code to get ABBC index value 6
End Select
Case Else
Select Case A
Case D
'code to get ABCA index value 5
Case Else
Select Case B
Case D
'code to get ABCB index value 6
Case Else
'all thats left code to get ABCD and ABCC index value 7
End Select
End Select
End Select
End Select
End Select
Next i
Опять ... монументально медленно.Я пробовал это, сохраняя строки по отдельности, в массивах, словарях, объектах классов и просматривая их, пытаясь оптимизировать сравнение безрезультатно.Я ДУМАЮ, что я прибил это к этому сравнению, являющемуся тем, что вызывает проблему.Не пойми меня неправильно.Для 1 комплекта из 20 он быстро осветляется, но когда мне нужно сделать это 50000 раз, это займет 7 часов.
То, что я еще не пробовал, но слегка заинтересовал меня, это внешний многопоточный код vbscript или C ++ для сравнения (я ничего не знаю о vbscipt C ++ или многопоточности, так что на данный момент это не таквопрос. Так как насчет этого? Любые предложения о том, как я могу ускорить сравнение?