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

时间:2016-07-04 03:49:29

标签: arrays ruby loops iteration each

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

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

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是一个未定义的局部变量,因为我在函数外部初始化它。我是以错误的方式来做这件事的吗?任何人有任何指针?

1 个答案:

答案 0 :(得分:5)

使用map最容易做到这一点,就像这样:

new_array = old_array.map{|s| s.split.uniq }

详细信息

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

String方法split默认情况下会拆分空格字符,因此我们可以在没有参数的情况下调用它,它将返回一个单词数组。 有关详细信息...... split使用$;作为默认参数,即Ruby的全局字段分隔符变量...如果字段分隔符为nil ,默认情况下,split默认为空格分隔