我想用每个元素的第一个字母创建一个数组,但我一直只获取整个元素 - 我做错了什么?
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
你传递给它一个 block (do ...
)但是你的方法不接受或使用一个 block 。你可能想调用each
关于each_group_by_first_letter
的结果.
无论如何,Array 类已经拥有您需要的工具——无需为此定义新方法。
x = [ 'abcd', 'efgh', 'able' ]
x.map {|word| word[0] }
# => [ 'a', 'e', 'a' ]
关于ruby - 从另一个数组填充一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8131669/