从另一个数组填充数组

use*_*856 2 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
Run Code Online (Sandbox Code Playgroud)

Jor*_*ing 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' ]
Run Code Online (Sandbox Code Playgroud)