Ruby 我能做点像地图的东西!(&;:strip)是否要写入?
我试图删除数组元素的空白,但同时我希望这是内联替换。这样的事情是可以做到的Ruby 我能做点像地图的东西!(&;:strip)是否要写入?,ruby,arrays,Ruby,Arrays,我试图删除数组元素的空白,但同时我希望这是内联替换。这样的事情是可以做到的 lines[3..lines.length-4].map!(&:strip).delete_if { |table_name| table_name == "" } 当你调用map在行[3..lines.length-4]此方法不是在原始数组中调用,而是在包含原始行的切片的新数组中调用。如果您需要将行数组的一部分替换为剥离和过滤的元素,您可以这样做: lines[3..lines.length-4] = lin
lines[3..lines.length-4].map!(&:strip).delete_if { |table_name| table_name == "" }
当你调用
map
在行[3..lines.length-4]
此方法不是在原始数组中调用,而是在包含原始行的切片的新数组中调用。如果您需要将行
数组的一部分替换为剥离和过滤的元素,您可以这样做:
lines[3..lines.length-4] = lines[3..lines.length-4].map(&:strip).reject { |tn| tn == "" }
在这里,在对包含的元素进行条带化和筛选后,您可以显式重写行的切片数组。它不起作用,因为行[3..lines.length-4]
返回一个新数组,而不是对旧数组的部分“引用”(因此您的映射!
只是在原地修改这个新数组)
一个想法:
(3..lines.length-4).each { |idx| lines[idx].strip! }
如果你尝试了它,它工作了,那么它肯定可以完成=)它返回我所期望的,但它没有被替换..为什么要就地更新?输入太大,以至于担心创建一个新的数组吗?很高兴您添加了问题的描述,但是您完全更改了代码示例。更重要的是,这一个可以工作,而第一个版本不行。如果文件很大,处理是逐行进行的,我推荐另一种方法(生成器)。顺便说一句,KL-7是对的,你不应该这样改变问题,现在现有的答案毫无意义。我相信你的意思是strip代码>。OP也需要过滤。@KL-7,Index,strip!当我看到这个问题时,没有delete_if:-(+1你的,就是这样。但是,我认为这不是处理这种处理的正确方法。就地更新很难看。