从另一个数组填充数组

时间:2011-11-15 04:54:17

标签: ruby arrays populate

我想用每个元素的第一个字母创建一个数组,但我只是得到了整个元素 - 我做错了什么?

def each_group_by_first_letter
  self.each do |x| 
    first_letter = []
    first_letter = x[0, 1].to_s
  end

  x = ["abcd", "efgh", "able"]
  x.each_group_by_first_letter do |letter, words|
    printf("%s: %s\n", letter, words)
  end

2 个答案:

答案 0 :(得分:8)

您的代码存在一些问题。其中:

  • 您创建一个名为first_letter的数组,但然后在下一行用字符串覆盖它,而不是将字符串添加到它。 (要将项添加到数组,通常会使用Array#pushArray#<<。)
  • 您不会返回first_letter,这意味着您将隐含地返回数组本身(假设self是什么 - 因为这样做了Array#each返回的内容。
  • 当您致电each_group_by_first_letter时,您会将其传递给一个区块(do ...)但您的方法不会使用或使用区块。您可能需要就each
  • 的结果致电each_group_by_first_letter

无论如何,Array类已经拥有了您需要的工具 - 无需为此定义新方法。

x = [ 'abcd', 'efgh', 'able' ]

x.map {|word| word[0] }
# => [ 'a', 'e', 'a' ]

答案 1 :(得分:3)

x = ["abcd", "efgh", "able"]
y = x.map{|e| e[0]}          # keeps x intact

x = ["abcd", "efgh", "able"]
x.map!{|e| e[0]}             # modifies x

 => ["a", "e", "a"]