将具有不同对象的数组分隔为 ruby 中的特定对象数组

Separating array with different objects into specific object arrays in ruby

假设我有一个包含不同类型对象的数组,例如:

[1,true,'hello',true,2,' ','world']

我正在尝试创建一个函数来输出一组数组,这些数组将这些对象分开。

[ [1,2] , ['hello', ' ', 'world'] , [true,true] ]

到目前为止我已经有了这个:

def same_object arg
    arg.inject([]){ |acc,value| 
            flag = 0
            acc.each do |i|
                if i[0] != nil && value.class == i[0].class
                    i << value
                    flag = 1
                end
            end

            if flag == 0
                acc << [value]
            end
    }
end

问题是当我这样做时显然出现错误:

value.class == i[0].class

这有点奇怪,因为对我来说这是有道理的。我是 ruby 的新手,希望能提供一些见解。

您的示例失败,因为您没有 return 在 inject 块的末尾更新 acc。只需要在结束前加上acc }:

  #...
  end
  acc
}

除此之外我会做这样的事情:

[1,true,'hello',true,2,' ','world'].group_by(&:class).values
#=> [[1, 2], [true, true], ["hello", " ", "world"]]