Подбор конкретных предметов в нескольких отдельных коллекциях - PullRequest
0 голосов
/ 01 декабря 2010

У меня проблема с тем, что у меня есть несколько отдельных списков ID, например.

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

У меня есть еще одна коллекция удостоверений личности ...
Например: 1,2,4

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

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

Например:

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

Коллекция составляет: 3,1,2

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 03 декабря 2010

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

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

  • 3 (A, B, C)
  • 1 (A, B)
  • 2 (A, B)

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

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

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

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

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

0 голосов
/ 02 декабря 2010

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

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

'Отправка' коллекции в каждой возможной комбинации заказов будет работать, но это будет огромная работа .....

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

...