2011-08-19 40 views
1

更新:讓我詳細說明閉包器:我要求例程的名稱。 我嘗試兌現Principle of least astonishment,命名非常重要。尋找轉換特定哈希鍵和值的算法的名稱

另外:如果這是一個existant常規,我的猜測是,它是有客觀的叫法。當我知道這個名字的時候,我只能說出一點,google就可以了。

我需要'轉身'在javascript中的哈希,如下所示。 (這些值始終是數組)。功能turnaround()不是問題(我已經寫過),但名稱是。

我在這裏究竟做什麼,或者換句話說,這個例程有一個名字?

如果它不是一個衆所周知的算法,我應該如何命名它以便名稱定義它在做什麼?

true == ((h2 == turnaround(h1)) && (h1 == turnaround(h2)) 


h1 : { 
    a : [ 2, 3 ], 
    b : [ 3, 4 ], 
    c : [ 2, 4 ], 
    d : [ 1, 5 ] } 

h2 : { 
    1 : ["d"], 
    2 : ["a","c"], 
    3 : ["a","b"], 
    4 : ["b","c"], 
    5 : ["d"] } 
+2

「invertHash」,我想。但說實話,爲什麼你說自己的功能很重要? – Blazemonger

+0

對我來說,沒有這樣的「自己的功能」,我嘗試寫可重用的。恕我直言,命名功能非常重要。一個函數應該只做一件事,名字應該儘可能精確地告訴它是什麼。 – Peter

+0

除了InvertHash對我來說意味着切換鍵和值,以及一個很好的例子,說明錯誤的命名可能會產生誤導。 – Peter

回答

2

通常,如果您有將鍵與值列表關聯的映射,則從值到鍵列表的相應映射稱爲inverted index。因爲你正在做的是構造一個特定映射的倒排索引,所以你可以調用你的函數來達到createInvertedIndexinvertIndex的效果。

+0

是的,這是我正在尋找。我知道它必須存在,我甚至需要與文本中相同的集計算 - 搜索範例,我的感覺是正確的,tx! – Peter

1

您的功能是turnAround(turnAround())= Identity。

週轉=週轉^應用週轉(H)你會發現獨特的元h^-1使得h =週轉(H^-1)

因此你倒h當-1

。 (inverse function

你可以稱之爲inverseHashFunction

我認爲這是不夠明確的,

否則reciprocalHashreciprocalBijectionHash? etc ...

+0

反轉散列對我意味着:切換鍵和值,在這種情況下,鍵將變成數組。 – Peter

1

如果你想,你可以把你的散列看作描述一個關係R,根據定義x R y當且僅當y在h1[x]

然後,您的turnaround函數的返回值以相同的方式描述反比關係:按定義y R -1 x當且僅當x R y。當且僅當x在turnaround(h1)[y]時會發生這種情況。

所以,如果你實際上使用h1h2作爲關係的描述,那麼我會叫它invertedRelation或類似的。如果你不是用它們作爲關係的描述(或者你正在使用它們,但是你的讀者不熟悉數學術語'關係'),那可能會讓人困惑。

你真的用什麼樣的變量名稱來處理這些散列?如果你對功能名稱是描述性的狂熱,當然你不會真的叫你的變量h1h2

+0

我遠非狂熱,但當然不是,h1和h2是爲了這個例子。 – Peter

+0

但我想看到它比h1和h2更通用,所以我在這裏怎麼稱呼它們並不重要。 – Peter

+0

@Peter:我認爲你應該對這個表單的散列值有一個名稱,我期望決定這個名字可能有助於指定對它們進行操作的函數。所以這可能很重要 - 如果這種形式的哈希在文檔中被稱爲「foobar」,並且包含它們的變量的名稱通常是「leftFoobar」,「rightFoobar」,「userFoobar」等,那麼這將是一件好事想法調用函數「invertedFoobar」或「invertedFoobar」 –