我想用每个元素的第一个字母创建一个数组,但是我一直在获取整个元素-我做错了什么?

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

最佳答案

你的代码有几个问题。其中:
创建一个名为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' ]

07-28 02:50
查看更多