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是一个未定义的局部变量,因为我在函数外部初始化它.我是以错误的方式来做这件事的吗?任何人有任何指针?
这样的事情最容易完成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默认为空格分隔.