这里我们解决了这个问题:
我有一个小丑机构,有很多小丑去参加各个派对。有些人去同一个派对。我记录了谁去了哪个派对。 然后,我有一个死小丑,但我需要解析日志,以便让人们去调查,小丑和党内的其他人,但也需要与死小丑相关的所有派对和小丑(所有小丑都在小丑参加的前几派。)
基本上,我已经考虑过用图表来做这件事,但也许这不是最好的主意,图表在这个问题中的使用非常复杂。
我的日志是这样的:
type Action =
| Move of Clown * Party
let logs = Action list
您认为转换列表并解析它会是一个很好的数据结构吗?
答案 0 :(得分:3)
这是一个功能性解决方案,使用Seq.groupBy
函数
logs |> Seq.groupBy (function |Move(clown,party) -> party) |> Map.ofSeq
这会给你一个Map<Party,Clown list>
,你可以轻松查询,找出哪个小丑在哪一方。
答案 1 :(得分:1)
你是对的,图表非常复杂 - 但这主要是在你开发通用图表的时候。在你的情况下,我会说图表仍然是最好的方式,因为这将直接模拟情况。
我不确定如何在功能范例中做到这一点,但这里有一个很好的旧命令式的想法:
n
小丑和号码从0
(包括)提供给n
(不包括)。这些将作为数组索引n * n
数组,初始化为全零。i
和j
)设置i,j
- 和j-i
-th cell to 1 当你被给予一个死小丑时,你现在要做的就是阅读与死小丑号相对应的行。带有1个的小区将告诉你哪些小丑参加了与死去的小丑的聚会。
我认为上面的描述表明,如果图表是针对特定情况设置的,则图表不一定非常复杂。然后,我不确定图形在函数式编程中表现得多么好,所以如果你的目标是以函数式方式完成所有事情,那么图形可能会复杂得多。