如何在Clojure中创建字符串索引的映射?

时间:2017-02-13 13:31:54

标签: clojure

我想创建一个地图,其中键是字符串中的字符,每个键的值是字符串中给定字符的位置列表。

2 个答案:

答案 0 :(得分:6)

更短的变体:

(defn process [^String s]
  (group-by #(.charAt s %) (range (count s))))


user> (process "asdasdasd")
;;=> {\a [0 3 6], \s [1 4 7], \d [2 5 8]}

请注意此处的索引已排序

答案 1 :(得分:4)

我相信有几个解决方案。我的第一个想法是使用map-indexed来获取地图中[index character]然后reduce集合的列表。

(defn char-index-map [sz]
  (reduce
   (fn [accum [i ch]]
     (update accum ch conj i))
   {}
   (map-indexed vector sz)))


(char-index-map "aabcab")

;;=> {\a (4 1 0), \b (5 2), \c (3)}