Ruby on rails 排序数组和散列

Ruby on rails 排序数组和散列,ruby-on-rails,ruby,arrays,Ruby On Rails,Ruby,Arrays,我有很多数据: [{"id"=>"3"}, {"id"=>"9"}] {"id"=>"27"} {"id"=>"5"} {"id"=>"11"} [{"id"=>"9"}, {"id"=>"23"}, {"id"=>"11"}, {"id"=>"19"}, {"id"=>"7"}, {"id"=>"5"}, {"id"=>"25"}, {"id"=>"13"}, {"id"=>"15"}, {"id"=>"

我有很多数据:

[{"id"=>"3"}, {"id"=>"9"}]
{"id"=>"27"}
{"id"=>"5"}
{"id"=>"11"}
[{"id"=>"9"}, {"id"=>"23"}, {"id"=>"11"}, {"id"=>"19"}, {"id"=>"7"}, {"id"=>"5"}, {"id"=>"25"}, {"id"=>"13"}, {"id"=>"15"}, {"id"=>"3"}, {"id"=>"21"}, {"id"=>"17"}, {"id"=>"31"}]
{"id"=>"17"}
{"id"=>"13"}
[{"id"=>"13"}, {"id"=>"7"}, {"id"=>"5"}]
[{"id"=>"9"}, {"id"=>"11"}, {"id"=>"19"}, {"id"=>"5"}, {"id"=>"25"}, {"id"=>"13"}, {"id"=>"15"}, {"id"=>"3"}, {"id"=>"21"}, {"id"=>"17"}]
[{"id"=>"9"}, {"id"=>"3"}]
[{"id"=>"21"}, {"id"=>"11"}, {"id"=>"7"}, {"id"=>"5"}, {"id"=>"25"}]
{"id"=>"5"}
[{"id"=>"25"}, {"id"=>"5"}, {"id"=>"3"}, {"id"=>"21"}]
{"id"=>"3"}
{"id"=>"11"}
[{"id"=>"13"}, {"id"=>"33"}, {"id"=>"7"}, {"id"=>"5"}, {"id"=>"37"}, {"id"=>"31"}]
[{"id"=>"13"}, {"id"=>"7"}, {"id"=>"5"}, {"id"=>"21"}]
是否有任何方法对其进行排序以获得:

arrays = all_arrays_here
hashes = all_hashes_here

所有这些都在一个数组中。

假设此数据位于某种可枚举对象中,您可以执行以下操作:

arrays, hashes = data.group_by(&:class).values_at(Array, Hash)
但是感觉不对。最有可能的情况是,您需要将每个散列包装在其自己的数组中(这样您可以在以后进行双重迭代)。如果是这种情况:

data.map! {|array_or_hash| Array.wrap(array_or_hash)}

假设此数据位于某种可枚举对象中,则可以执行以下操作:

arrays, hashes = data.group_by(&:class).values_at(Array, Hash)
但是感觉不对。最有可能的情况是,您需要将每个散列包装在其自己的数组中(这样您可以在以后进行双重迭代)。如果是这种情况:

data.map! {|array_or_hash| Array.wrap(array_or_hash)}
a=[
[{“id”=>“3”},{“id”=>“9”},
{“id”=>“27”},
{“id”=>“5”},
{“id”=>“11”},
[{“id”=>“9”}、{“id”=>“23”}、{“id”=>“11”},
{“id”=>“17”}
]
数组,散列=a.inject([[],[])do | acum,item|
item.u是否为?(数组)?累计[0]
a=[
[{“id”=>“3”},{“id”=>“9”},
{“id”=>“27”},
{“id”=>“5”},
{“id”=>“11”},
[{“id”=>“9”}、{“id”=>“23”}、{“id”=>“11”},
{“id”=>“17”}
]
数组,散列=a.inject([[],[])do | acum,item|

item.u是否为?(数组)?accum[0]@Broisasze先做了同样的事情,但我认为能够了解Ruby的功能很重要

考虑这一点:

foo = [[1], {a: 2}, %w[3 4], {b: 5, c: 6}].group_by{ |e| e.class }
foo # => {Array=>[[1], ["3", "4"]], Hash=>[{:a=>2}, {:b=>5, :c=>6}]}
Ruby的内置功能就是为解决这类问题而设计的

在此基础上:

arrays, hashes = foo.values_at(Array, Hash)

arrays # => [[1], ["3", "4"]]
hashes # => [{:a=>2}, {:b=>5, :c=>6}]

按照指定的顺序从散列(在本例中)检索值。

@BroiSatse首先做了同样的事情,但我认为能够看到Ruby的功能很重要

考虑这一点:

foo = [[1], {a: 2}, %w[3 4], {b: 5, c: 6}].group_by{ |e| e.class }
foo # => {Array=>[[1], ["3", "4"]], Hash=>[{:a=>2}, {:b=>5, :c=>6}]}
Ruby的内置功能就是为解决这类问题而设计的

在此基础上:

arrays, hashes = foo.values_at(Array, Hash)

arrays # => [[1], ["3", "4"]]
hashes # => [{:a=>2}, {:b=>5, :c=>6}]

按指定的顺序从散列(在本例中)检索值。

这些值是否在数组中?所有这些数据是否都存储在较大的数组中?或某个可枚举类?您需要提供有效数据。事实上,它是无效的,如果我们尝试使用它,Ruby会窒息。请不要要求我们修改它,直到它是有效的,因为我们可以猜测错误,导致无效的答案。另外,你不应该收到这样的混合数据,所以这让我觉得生成它的代码中有一些奇怪的东西,或者,这就是你在问一件事,但确实需要问另一件事的地方。以后,请将你的示例缩减到最低限度,以表明你的观点。如果我正确理解你的问题,这就足够了:
arr=[[{“id”=>“3”}、{“id”=>“9”}、{“id”=>“27”}、{“id”=>“5”}、[{“id”=>“9”}、{“id”=>“23”}]
或者(更好,依我看):
arr=[[1,2]、{“id”=>“27”、{“id”=>“5”}、{“id”=>“3,4]
这些数据都存储在一个较大的数组中吗?或某个可枚举类?您需要提供有效数据。事实上,它是无效的,如果我们尝试使用它,Ruby会窒息。请不要要求我们修改它,直到它是有效的,因为我们可以猜测错误,导致无效的答案。另外,你不应该收到这样的混合数据,所以这让我觉得生成它的代码中有一些奇怪的东西,或者,这就是你在问一件事,但确实需要问另一件事的地方。以后,请将你的示例缩减到最低限度,以表明你的观点。如果我正确理解你的问题,这就足够了:
arr=[[{“id”=>“3”}、{“id”=>“9”}、{“id”=>“27”}、{“id”=>“5”}、[{“id”=>“9”}、{“id”=>“23”}]
或者(更好,依我看):
arr=[[1,2]、{“id”=>“27”、{“id”=>“5”}、{“id”=>“3,4”
…如果后者不是普通的话,
?问题已被编辑,是的,元素存储在数组中。@D-side-平原平坦将为我们提供一个带有散列的单个数组-我非常确定周围的数组意味着什么,比如匿名用户组。将它展平会花费我们一些数据……如果是后者的话,平原
展平
会吗?问题已被编辑,是的,元素存储在数组中。@D-side-平原平坦将为我们提供一个带有散列的单个数组-我非常确定周围的数组意味着什么,比如匿名用户组。把它扁平化会让我们损失一些数据。