死亡小丑与功能数据结构



问题又来了:

我有一家小丑经纪公司,有很多小丑去参加不同的派对。有些人去同一个聚会。我还记录了每个人都去了哪个派对。然后,我有一个死去的小丑,但我需要解析日志以获得要调查的人,小丑和派对中的其他人,但还需要与死亡小丑相关的所有派对和小丑(小丑参加过的所有小丑)。

基本上,我想过用图表来做,但也许这不是最好的主意,在这个问题中使用图表是相当复杂的。

我的日志如下:

type Action = 
  | Move of Clown * Party
let logs = Action list

你认为它会是一个很好的数据结构来转换列表和解析它?

这是一个功能解决方案,使用Seq.groupBy函数

logs |> Seq.groupBy (function |Move(clown,party) -> party) |> Map.ofSeq

这将给你一个Map<Party,Clown list>,你可以很容易地查询哪个小丑在哪个派对上。

你是对的,图是非常复杂的-但这主要是当你开发一个通用的图。在你的情况下,我想说图表仍然是最好的方法,因为它可以直接模拟情况。

我不确定如何在函数式范例中做到这一点,但这是老式命令式风格的想法:

  1. 给出每个n小丑和从0(包括)到n(不包括)的数字。这些将作为数组索引
  2. 创建一个n * n数组,初始化为全零。
  3. 计划聚会时,对于聚会中的每一对小丑(编号ij),将i,j -th和j-i -th单元格设置为1

当你得到一个死去的小丑,你现在所要做的就是读取与死去的小丑的数字相对应的行。有1的细胞会告诉你哪些小丑和死去的小丑一起参加了派对。

我认为上面的描述表明,如果图形是为特定情况设置的,那么它们不一定是复杂的。然后,我不确定图形在函数式编程中表现得有多好,所以如果您的目标是用函数式风格做所有事情,那么图形可能要复杂得多。

最新更新