可以写出地图!(&:strip)之类的东西吗?

时间:2012-01-17 13:10:36

标签: ruby arrays

我正在尝试删除数组元素的空白区域,但同时我希望这是内联替换。是这样的事情可以做..

lines[3..lines.length-4].map!(&:strip).delete_if { |table_name| table_name == "" }

2 个答案:

答案 0 :(得分:1)

当您在map!上调用lines[3..lines.length-4]时,此方法不会在原始数组上调用,而是在新数组上调用,该方法包含原始lines数组的切片。如果你需要的是用你的剥离和过滤元素替换部分lines数组,你可以这样做:

lines[3..lines.length-4] = lines[3..lines.length-4].map(&:strip).reject { |tn| tn == "" }

在此处,您在对其包含的元素进行条带化和过滤后显式覆盖lines数组的切片。

答案 1 :(得分:1)

它不起作用,因为lines[3..lines.length-4]返回一个新数组,而不是旧数组的部分“引用”(因此你的map!只是在原地修改这个新数组)。

一个想法:

(3..lines.length-4).each { |idx| lines[idx].strip! }