Ruby 从另一个数组填充数组
我想用每个元素的第一个字母创建一个数组,但我一直只得到整个元素——我做错了什么Ruby 从另一个数组填充数组,ruby,arrays,populate,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: %
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
- 您不返回
,这意味着您隐式返回了数组本身(假设这就是第一个字母
,因为这就是返回的内容)self
- 当您按第一个字母调用
每个组时,您会传递一个块(
),但您的方法不接受或使用块。您可能想根据do…
每个组的结果按首字母
调用
each
x = [ 'abcd', 'efgh', 'able' ]
x.map {|word| word[0] }
# => [ 'a', 'e', 'a' ]
或
首先,你需要另一个
结尾
。我推断你的意思是在x=[“abcd]行之前…
是的…我将代码缩减到相关部分…在那里有另一端…好吧,你的每个组按首字母没有明确返回任何内容,所以在这种情况下,它只是返回self
。
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"]