2016-01-31 107 views
0

我想在閉包中使用散列映射,因爲我有一個for循環,將已排序的字符串和未排序的字符串傳遞給我的函數,我想要做的是兩個if哈希地圖上發言Clojure散列映射查詢鍵和值

1 if語句是

if hash-map doesnt contain string "x" 
put x in a new hash-set 

第二if語句是

if hash-map key "x" value is not equal to "y" 
remove "x" from hash-set 

這是我迄今爲止

(defn transform3 [y] 
(let [x (sort-string (str/lower-case y)) 
    my-hash-map (hash-map) 
    hashmap2 (hash-map)] 
(if-not (contains? my-hash-map x) 
    (my-hash-map x, y) 
    (hashmap2 y)) 

(if-not (get hash-map x) y) 
(dissoc hashmap2 x) 

;;remove from hash-set to do... 
)) 

如果聲明允許我使用諸如「get」之類的語句包含「put」等等,我該怎麼辦?

+0

如果您將我的答案納入問題中,那麼我的答案不再有任何意義。我可能會最終刪除它。我很確定這不是應該如此工作的方式。 –

+0

你應該接受我的答案,然後撰寫另一個新的問題。你也可以閱讀'assoc'和'dissoc'。還有'conj'。然後集合和地圖之間的區別。很可能你應該在你的問題中使用一套。 –

回答

1

hash-map是一個函數。當你調用它(使用parens)時,它會返回一個實際的哈希映射。我已更改您的代碼以通過該特定的錯誤消息。

(defn add-to-map [y] 
    (let [x (sort-string (str/lower-case y)) 
     my-hash-map (hash-map)] 
    (if-not (contains? my-hash-map x) 
    (hash-map x, y) 
     (hash-set y)) 
    (if-not (get hash-map x) y) 
     ;;remove from hash-set to do... 
    )) 
+0

啊對,所以我將不得不聲明它的名稱來引用它? 我將如何從集中刪除?在那一刻我只是使用打印語句來檢查它是否經過了if語句 – Freeman

+1

您通常使用'dissoc'從散列圖中刪除。你的代碼中沒有任何集合,所以我假定你的意思是哈希映射。我建議通過4cljure問題來處理語言。 –

+0

所以我已經更新原始帖子,所以我想我現在有一個哈希映射在X和Y.然後把Y到HashMap 2,然後如果X不等於Y從HashMap2刪除Y?會是正確的嗎?感謝您的建議,我從來沒有聽說過4clojure問題 – Freeman