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

Man*_*iro 0 ruby arrays object

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

[1,true,'hello',true,2,' ','world']
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个函数,该函数输出一组数组,这些对象是分开的.

[ [1,2] , ['hello', ' ', 'world'] , [true,true] ]
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经来了:

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
Run Code Online (Sandbox Code Playgroud)

问题是,当我这样做时,显然我得到了一个错误:

value.class == i[0].class
Run Code Online (Sandbox Code Playgroud)

这有点奇怪,因为对我来说这是有道理的.我是红宝石的新手,我很欣赏一些见解.

spi*_*ann 5

您的示例失败,因为您不会accinject块结束时返回更新.只需acc在结束前添加}:

  #...
  end
  acc
}
Run Code Online (Sandbox Code Playgroud)

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

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