循环遍历数组,将字符串转换为数组,推送到Ruby中的新数组

Lei*_*ana 1 ruby arrays iteration each loops

我目前正在开发一个项目,我需要遍历一个字符串数组,将这些字符串转换为数组,并将这些数组推送到更大的数组中.有些字符串有单词重复,所以我也需要删除它.我想避免对所有内容进行硬编码,所以我试着编写尽可能多的函数.

这是我正在谈论的一个例子.

old_array = ['Lilies are lovely lovely', 'Roses are romantic romantic', 'Daisies are bright bright']

new_array = []
Run Code Online (Sandbox Code Playgroud)

这是新数组应该是什么样子:

new_array = [['Lilies', 'are', 'lovely'], ['Roses', 'are', 'romantic'], ['Daisies', 'are', 'bright']]
Run Code Online (Sandbox Code Playgroud)

因此,old_array中的字符串必须转换为子数组,并删除重复的单词.

我一直在尝试这个和变化一段时间,并没有很好地工作.

def s_to_a(array)
  array.each do |string|
    string.split(" ").uniq
    new_array.push(string) #pretty sure this is incorrect
  end
end

s_to_a(old_array)
Run Code Online (Sandbox Code Playgroud)

我一直得到的错误是new_array是一个未定义的局部变量,因为我在函数外部初始化它.我是以错误的方式来做这件事的吗?任何人有任何指针?

Cam*_*Cam 5

这样的事情最容易完成map,如下:

new_array = old_array.map{|s| s.split.uniq }
Run Code Online (Sandbox Code Playgroud)

细节

map是一种Enumerable方法,它将被调用的可枚举对象(通常是array)转换或"映射" 为新的array.这比使用nil-checking手动推入子数组更方便.

默认情况下,该String方法会split拆分空白字符,因此我们可以在没有参数的情况下调用它,它将返回一个单词数组. 对于一些详细信息... split使用$;作为其默认的参数,这是Ruby的全局场分离变量...如果字段分隔符是零,它在默认情况下,split默认为空格分隔.

  • 每个学习Ruby的人都应该花一些时间查看[Enumerable](http://ruby-doc.org/core-2.3.1/Enumerable.html)库中提供的众多方法,因为其中许多方法都非常方便.`map`就是这样一种方法,但还有其他几十种. (3认同)