用值替换列表中的空字符串

Replace Empty Strings In A List With A Value

如果我有一个列表

("foo" "bar" "" "baz")

我需要将任何 "" 更改为 "biz",有什么好的方法可以做到这一点?

(map #(if (empty? %) "biz" %)
     '("foo" "bar" "" "baz"))

为了完整起见,这里有一个使用更专业的内置函数的替代方法:

(replace ; Replace all instances of... 
  {"" "biz"} ; "" with "biz"... 
  '("foo" "bar" "" "baz")) ; in the list

这也是 returns 一个惰性序列。

请注意,作为第一个参数给出的映射可以包含多个条目。如果您有多个替代品,我肯定会选择 replace 而不是显式的 map

replace actually just uses map behind the scenes,但使用映射查找而不是相等性检查来进行替换。我希望他们对一个替换进行类似的预制,但是 replace 不止一次更快,因为它不需要像手动 = 那样对所有替换进行线性搜索检查。