我想知道如何将迭代器的结果转换成数组。我在下面给出了两个选项,它们都可以运行,但产生的结果格式错误。
这是我得到的结果与预期的结果。
enter image description here
我尝试将迭代器结果转换为Array()
数组,但没有成功。
我试过:
1.使用.keep_if
方法的块代码
1.用于带有Array()
的if条件来进行转换。
我的期望:
一个非负整数数组。输入(l)是一个随机整数和字符串数组。
我的代码选项如下:
备选办法1:
def filter_list(l)
l.delete_if {|li| li.class ==String || li<0}
puts l
end
备选方案二:
def filter_list(l)
arr=[]
for i in l
if i.class == Integer && i>=0
arr1=arr.push(i)
end
end
puts Array(arr1)
end
为什么上述选项不起作用?
2条答案
按热度按时间nx7onnlm1#
为什么上述选项不起作用?
这里有一个语法错误:
方法定义使用带有小写
d
的def
关键字。您在这里编写的代码将被解释为对名为Def
的方法的方法调用,并将filter_list(l)
作为参数传递,即该代码将被解释为这就意味着Ruby不希望看到
end
关键字。vsdwdz232#
要以预期格式输出结果,只需使用
p
而不是puts
。来自
puts
的文档[...]如果使用数组参数调用,则将每个元素都写在新的一行上。每个给定的非字符串或数组对象将通过调用其
to_s
方法进行转换。而
p
方法在打印输出之前不调用to_s
,而是调用inspect
:对于每个对象,直接将
obj.inspect
后跟一个换行符写入程序的标准输出。inspect
为数组返回的默认字符串表示形式与预期输出类似。