Само дерево зависимостей загрузить тривиально, все, что вам нужно, - это некоторое сопоставление ключей (например, имен) с объектами.
Вы не указали ни одного языка, поэтому я выбрал Python. Ожидаемый ввод - это файл строк в форме "[имя]: [разделенные пробелами зависимости]".
def load_depends(file):
depends = {}
for line in file:
line = line.strip()
if not line or line.startswith("#"): # allow blanks and comments
continue
name, _, deps = line.partition(":")
deps = deps.strip()
assert deps, "invalid input" # most basic input error-checking
depends[name] = set(deps.split())
return depends
В этом коде предполагается, что любой элемент, не указанный в списке, имеет нулевые зависимости, и при желании вы можете пройтись по дереву, чтобы добавить пустые записи. По крайней мере, вы должны проверить наличие рекурсивных зависимостей.
Пример:
>>> input = """\
... a: b c
... b: c
... c: d
... e: a
... """.split("\n")
>>> from pprint import pprint
>>> pprint(load_depends(input))
{'a': set(['b', 'c']),
'b': set(['c']),
'c': set(['d']),
'e': set(['a'])}
[Примечание: я использую ярлык, так как мне действительно не нужен файл строк, а есть итерация строк (с которыми встречается файл), поэтому я передаю список строк функции.]
Вы можете создавать всевозможные функции поверх этой базовой структуры и инкапсулировать ее и эти концепции (например, зависит от того, рекомендует ли, рекомендует и даже конфликтует с заменой и т. Д.) В различные объекты, специфичные для вашей системы. *