Как насчет пары структур данных: Dictionary<string, Guid>
и Dictionary<Guid, List<string>>
Чтобы добавить пару ключей (a, b) [вы можете разложить большее дополнение на пары (1 + 2, 2 + 3, ...], действуйте следующим образом: -
Поиск a и b в первом словаре.
Если ни один не существует, создайте новый Guid и добавьте (a, g) и (b, g) в первый словарь и (g, List {a}) и (g, List {b}) во второй словарь.
Если один существует, скажем, a, возьмите guid из него (g) и добавьте другой (b, g) в первый словарь и прикрепите b к концу списка, найденного в [g] во втором словаре.
Если оба существуют И у них одинаковый гид - ничего не делать.
Если оба существуют, и у них разные направляющие, вам нужно объединить два набора // Это то, чего большинство других предлагаемых решений, похоже, не хватает // поэтому выберите Guid, чтобы исключить его, иди, возьмите его из второго словаря, добавьте список строк в другую запись, а затем удалите эту запись. Наконец, отметьте все слова в первом словаре, которые были в этом списке.
Чтобы получить все связанные слова, найдите Guid в первом словаре и возьмите список из второго словаря.
Конечно, статически увеличивающееся длинное значение, вероятно, будет работать лучше, чем Guid.