マップをフィルタリングする必要がありますが、フィルタは値を前のマップと比較する必要があり、フィルタリングされたマップは前回とは異なる値を持つ必要があります。ここでマップ値とクロージャーを比較する
は一例です:
Map to filter: {:key1 100 :key2 10 :key3 -20 :key4 -10 :key5 10}
Return: {:key3 -20 :key5 10}
私はこれを行うことができる方法の任意の暗示?
マップをフィルタリングする必要がありますが、フィルタは値を前のマップと比較する必要があり、フィルタリングされたマップは前回とは異なる値を持つ必要があります。ここでマップ値とクロージャーを比較する
は一例です:
Map to filter: {:key1 100 :key2 10 :key3 -20 :key4 -10 :key5 10}
Return: {:key3 -20 :key5 10}
私はこれを行うことができる方法の任意の暗示?
partition-byは、シーケンスが値を変更するときに基づいてシーケンスをチャンクします。 partition-by
に値の "signum"を見て、各チャンクの最初の結果のみを取るように指示することができます。
(->> {:key1 100 :key2 10 :key3 -20 :key4 -10 :key5 10}
(partition-by #(Integer/signum (val %)))
rest
(map first))
=> ([:key3 -20] [:key5 10])
マップ内のキーは順序付けられていないので、確実に動作させるためには、「次の」キーが何を想定しているかを定義する必要があります。 – Lee
私はあなたのコメントに同意するが、私はそれが私の答えではなく、質問の仕様に関する問題だと思う。 – user12341234
最初の行と実際にソートされる行の両方に '(into(sorted-map)...) 'を使用し、OPが指摘したマップ結果を得るために'(map first)の後に 'を追加することをお勧めします。 – Josh
あなたはソートマップではなく、まっすぐなマップを使用した場合の質問は 'ので、良いかもしれない(ソートマップ:KEY1 100:KEY2 10:KEY3 -20:KEY4 -10:KEY5 10)'。 * previous *の概念は理にかなっています。 –
小さな(8エントリ未満)マップリテラルはすべてソートされていると私は理解しています。だから、この特定の例では、その罰金、しかし、より大きな例では、おそらくそうではありません。 – user12341234
申し訳ありませんが、私の間違いは、実際のプログラムのように、このキーは日付になります、私はそれらのソートマップを作成することができます。 – Pituca292