如何在Ruby中将迭代器的结果转换为数组

uurity8g  于 2022-12-22  发布在  Ruby
关注(0)|答案(2)|浏览(98)

我想知道如何将迭代器的结果转换成数组。我在下面给出了两个选项,它们都可以运行,但产生的结果格式错误。
这是我得到的结果与预期的结果。
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

为什么上述选项不起作用?

nx7onnlm

nx7onnlm1#

为什么上述选项不起作用?
这里有一个语法错误:

Def filter_list(l)
↑

方法定义使用带有小写ddef关键字。您在这里编写的代码将被解释为对名为Def的方法的方法调用,并将filter_list(l)作为参数传递,即该代码将被解释为

self.Def(filter_list(l))

这就意味着Ruby不希望看到end关键字。

vsdwdz23

vsdwdz232#

要以预期格式输出结果,只需使用p而不是puts
来自puts的文档
[...]如果使用数组参数调用,则将每个元素都写在新的一行上。每个给定的非字符串或数组对象将通过调用其to_s方法进行转换。
p方法在打印输出之前不调用to_s,而是调用inspect
对于每个对象,直接将obj.inspect后跟一个换行符写入程序的标准输出。
inspect为数组返回的默认字符串表示形式与预期输出类似。

相关问题