2011-12-06 26 views
3

這裏我們去問題:具有功能數據結構的死小丑

我有一個小丑機構與許多小丑去不同的派對。有些人去同一個派對。我會記錄誰去哪個派對。 然後,我有一個死小丑,但我需要解析日誌,以獲得哪些人調查,小丑和其他人在黨內,但也需要所有的黨和小丑相關的死小丑(所有的小丑已經在以前的派對中,小丑已經參與)。

基本上,我曾經想過用圖表做這件事,但也許這不是最好的想法,圖表在這個問題中使用起來相當複雜。

我的日誌是這樣的:

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

你認爲是會是一個很好的數據結構進行改造的列表,並對其進行分析?

回答

3

這裏是一個實用的解決方案,使用Seq.groupBy功能

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

這會給你一個Map<Party,Clown list>您可以輕鬆地查詢發現其中的小丑在哪一方。

1

你說得對,圖很複雜 - 但主要是當你開發一個通用圖時。就你而言,我會說圖表仍然是最好的方法,因爲這將直接模擬情況。

我不知道如何在功能範式做到這一點,但這裏的想法好老勢在必行風格:

  1. 給每個n小丑和許多來自0(含)至n(獨家)。這些將作爲數組索引
  2. 構建一個n * n數組,初始化爲全零。
  3. 當一方進行了計劃,在黨的每對小丑的(與數字ij),設置i,j個和第j-i電池1

當你給一個死小丑,你現在要做的就是讀對應於死小丑編號的行。他們中有1個的細胞會告訴你哪些小丑參加了這個死小丑的派對。

我認爲上面的描述表明,如果圖形針對特定情況進行設置,圖形不一定非常複雜。然後再次,我不確定在函數式編程中表現得如何很好地表現出來,所以如果你的目標是用功能性風格去做所有事情,那麼圖形可能會更加複雜。