Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 我能做点像地图的东西!(&;:strip)是否要写入?_Ruby_Arrays - Fatal编程技术网

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你的,就是这样。但是,我认为这不是处理这种处理的正确方法。就地更新很难看。