我正在开发一个项目,我需要遍历一个字符串数组,将这些字符串转换为数组,并将这些数组推送到更大的数组中。有些字符串有单词重复,所以我也需要删除它。我想避免对所有内容进行硬编码,所以我正在努力编写尽可能多的函数。
这是我正在谈论的一个例子。
old_array = ['Lilies are lovely lovely', 'Roses are romantic romantic', 'Daisies are bright bright']
new_array = []
这是新数组的样子:
new_array = [['Lilies', 'are', 'lovely'], ['Roses', 'are', 'romantic'], ['Daisies', 'are', 'bright']]
因此必须将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)
我不断得到的错误是new_array是一个未定义的局部变量,因为我在函数外部初始化它。我是以错误的方式来做这件事的吗?任何人有任何指针?
答案 0 :(得分:5)
使用map
最容易做到这一点,就像这样:
new_array = old_array.map{|s| s.split.uniq }
map
是一种Enumerable
方法,可将其调用的可枚举对象(通常为array
)转换或“映射”为新的array
。这比使用nil-checking手动推入子数组更方便。
String
方法split
默认情况下会拆分空格字符,因此我们可以在没有参数的情况下调用它,它将返回一个单词数组。 有关详细信息...... split
使用$;
作为默认参数,即Ruby的全局字段分隔符变量...如果字段分隔符为nil ,默认情况下,split
默认为空格分隔。