我正在尝试寻找一种Clojure惯用的方式来“压缩”一个向量:
(shift-nils-left [:a :b :c :a nil :d nil])
;=> (true [nil nil :a :b :c :a :d])
(shift-nils-left [nil :a])
;=> (false [nil :a])
(shift-nils-left [:a nil])
;=> (true [nil :a])
(shift-nils-left [:a :b])
;=> (false [:a :b])
换句话说,我想将所有的
nil
值移到向量的左端,而不改变长度。布尔值表示是否发生了任何移位。 "外部"结构可以是任何seq
,但内部结果应该是一个向量。我怀疑这个函数会涉及到对
nil
值的过滤,并使用into
将其添加到与原始向量相同长度的nil
向量中,但我不确定如何将结果缩减回原始长度。我知道如何手动完成这个过程,但我认为Clojure能够在一行代码中完成它。我正在考虑写一个Bejeweled玩家作为学习Clojure的练习。
谢谢。
nil
值替换消失的宝石。然后我会使用“压缩”函数将nil
值移动到顶部,再用宝石重新填充(我已经有一个完成这个任务的函数)。 - Ralph