Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从另一个数组填充数组_Ruby_Arrays_Populate - Fatal编程技术网

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
无论如何,Array类已经有了您需要的工具——不需要为此定义新方法

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"]