2010-12-01 3 views
0

У меня есть проблема, при которой у меня есть несколько отдельных списков идентификаторов, например.Соответствие определенных элементов в нескольких отдельных коллекциях

Список (А) 1,2,3,4,5,7,8
Список (Б) 2,3,4,5
Список (С) 4,2,8,9,1
и т.д ...

Я тогда еще один сборник идентификаторов ...
Например: 1,2,4

Мне нужно, чтобы попытаться соответствовать одному в каждый список. Если я могу полностью сопоставить все ID в моей вторичной коллекции (один идентификатор коллекции, соответствующий ID из каждого списка), тогда я получаю истинный результат ....

Я обнаружил, что это становится сложным, потому что если вы просто перебираете списки, соответствующие первой паре папок/списков, с которой вы сталкиваетесь, могут привести к тому, что вы исключаете возможную комбинацию дальше по линии, тем самым возвращая ложный отрицательный результат.

Например:

List (A) 1,2,3,4
Список (В) 1,2,3,4
Список (С) 3,4

Коллекция : 3,1,2

Первый идентификатор из коллекции (3) соответствует записи в списке A, второй идентификатор в коллекции (1) соответствует элементу в списке B, однако окончательный идентификатор в коллекции (2) DOESNT соответствует любой записи в списке C, однако, если вы измените порядок сбора: 2,1,3, то совпадение найдено .... е Я ищу какую-либо форму логики за попытку совпадения по всем возможным комбинациям эффективным образом (?)

Чтобы сделать его более сложным, то идентификаторы фактически GUID так не может просто быть отсортированы в порядке возрастания

Надеюсь, я описал это достаточно хорошо, чтобы дать понять, что я пытаюсь и с некоторой удачей кто-то сможет сказать мне, что мне нужно сделать очень легко, и мне не хватает чего-то реального!
Я вынужден кодировать это в VB6, но любые методы или псевдокоды были бы замечательными. Бэкэнд - это SQL-сервер, поэтому, если бы было возможно решение с использованием TSQL, это было бы еще лучше, так как все идентификаторы уже хранятся в таблицах.

Большое спасибо заранее.

+0

Итак, списки также содержат GUID? После того, как совпадение найдено в списке, этот список удален из дальнейших проверок? – jakdep 2010-12-02 13:45:26

ответ

0

Джейк, да, списки и коллекция содержат GUIDS. Я использовал простые целые числа, чтобы немного упростить проблему.

После того, как список был сопоставлен, его невозможно найти снова, следовательно, проблема упорядочения, которую я попытался объяснить. Если вы скажете, что список как «сопоставлен», дальнейшие попытки сопоставить это не будут выполнены. Именно такое поведение может вызвать ложный негатив.

«Отправка» сбор в в каждой возможной комбинации заказов будут работать, но будет массивной работой .....

Я чувствую, что должно отсутствовать действительно простая концепцию или решений здесь ?? !!
Спасибо за вашу помощь.

+0

Объедините списки и выполните поиск в объединенном списке. – wqw 2010-12-02 19:04:08

0

Я не вижу возможности проверять каждый GUID, содержащийся в списках, против каждого GUID в коллекции.Вам нужно будет вести учет, в котором перечислены каждый GUID в коллекции.

Для использования вашего примера коллекции (3, 1, 2), 3 встречается в списках A, B и C. В основном вы останетесь с этим набором данных.

  • 3 (А, В, С)
  • 1 (А, В)
  • 2 (А, Б)

После того, как вы перегоняют его вниз к этому набору данных можно определить, есть ли в списках GUID с нулевыми вхождениями, что приведет к отрицательному.

Я не совсем хорошо разбираюсь в алгоритмах, но вот как я буду действовать после этого: Начните с первого набора (A, B, C) и проверьте, сколько раз это происходит дальше в наборе данных , В этом случае не обнаружены вхождения.

Переход к следующему набору (A, B), если количество вхождений этого множества окажется больше длины этого множества, то есть более двух вхождений, приведет к отрицанию. Если число вхождений точно соответствует длине, как это имеет место здесь, набор (A, B) можно удалить из любого дальнейшего рассмотрения.

  • 3 (C)
  • 1()
  • 2()

Я думаю, вы бы продолжать повторять процесс до тех пор, отрицательный не идентифицирован или все случаи были исключены. Вероятно, это признанный алгоритм для такого рода проблем, но в этом отношении мне немного недостает. :(

Смежные вопросы