1

まだ学習中の clojure 初心者 (私) は、マップのリストを取得しました。
各マップには、1 つの口座番号とその他の情報が含まれています
(例: ({:account 123, :type "PK", :end "01.01.2013", ...} {:account 456 :type "GK" :end "01.07.2016) 」、...})今、増加する番号と口座番号
(のように)を順番に入れる関数が必要です{1, 123, 2, 456 etc}。そして、何を試しても取得できませんでした。

私はかつて Delphi を学びました。

for i :=1 to (count MYMAP)
do (put-in-a-list i AND i-th account number in the list)
inc i

いくつかの制限により、コアから関数を使用することは許可されていません。また、「use」、「ns」、「require」、「cycle」、「time」、「loop」、「while」、「 defn"、"defstruct"、"defmacro"、"def"、"defn"、"doall"、"dorun"、"eval"、"read-string"、"repeatedly"、"repeat"、"iterate"、"インポート」、「スラープ」、「スピット」 .

そして、下手な英語があればすみません。私が英語でそのような質問をするのは普通ではありません。

4

2 に答える 2

3

口座番号が点在する自然数の遅延シーケンスについては、次のようなものを試すことができます。

(interleave ; splices together the following sequences
 (map inc (range)) ; an infinite sequence of numbers starting at 1
 (map :account ; gets account numbers out of maps
      [{:account 123, :type "PK", :end "01.01.2013", ...}, ...])) ; your accounts

ただし、{}例の表記 ( {1, 123, 2, 456 etc}) は、マップにもっと関心がある可能性があることを示唆しています。その場合、次を使用できますzipmap

(zipmap ; makes a map with keys from first sequence to values from the second
 (map inc (range))
 (map :account
      [{:account 123, :type "PK", :end "01.01.2013", ...}, ...]))
于 2012-08-30T07:38:42.943 に答える
2

map-indexed増加する数列を作成するのに役立ちます:

user> (let [f (comp (partial into {})
                    (partial map-indexed #(vector (inc %) (:account %2))))]
        (f [{:account 123, :type "PK", :end "01.01.2013"} {:account 456 :type "GK" :end "01.07.2016"}]))
{1 123, 2 456}
于 2012-08-30T13:12:51.417 に答える