我想用每个元素的第一个字母创建一个数组,但是我一直在获取整个元素-我做错了什么?
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#push
或Array#<<
)
不返回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' ]