我想创建一个地图,其中键是字符串中的字符,每个键的值是字符串中给定字符的位置列表。
答案 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)}