注意:这与互斥的并发问题无关,但我想不出更好的方式来描述这个问题。
我有一个问题,我想让用户选择一些标志,但有些标志是互斥的。我想使用数据结构来描述哪些标志是互斥的,但我所想到的一切都很笨拙。
基本上,我希望能够指定如何使用标志,如下所示:
[-fa | -e | -d ] [ -c ] [ -g | -H ]
这在语义上应该意味着,我可以有 -fa、-e、-d 中的任何一个,但不能有两个或更多(但是,f 可以与 a 一起使用,您不需要同时使用两者)。我可以有或没有-c,我可以有-g或-h,但不能同时有。
这是我的“最佳”解决方案。
Map[Flag, MutexGroup] (及其逆, Map[MutexGroup, List[Flag]]) Map[MutexGroup, List[MutexGroup]]
我的例子会是什么样子
映射(“f”-> 1、“a”-> 1、“e”-> 2、“d”-> 3、“c”-> 4、“g”-> 5、“h”-> 6 ) Map(1 -> List(2, 3), 2 -> List(1, 3), 3 -> List(1, 2), 4 -> List.empty, 5 -> List(6), 6 - > 列表(5))
为简洁起见,我没有包含 Map[MutexGroup, List[Flag]]。
这个解决方案让我一想到必须使用它就感到不寒而栗。有处理这种事情的规范方法吗?