Ruby 通常,它会给我们期望的结果。当我们使用复杂的数组/散列时,它会变得很难。我花了几个小时寻找解决办法。再次感谢您的解释,非常有用!现在,我可以简单地访问数据。对于您的编辑:好的,没有重复。(这是第一个和第二个字段上的SQL group_by的结果。)但后面会
Ruby 通常,它会给我们期望的结果。当我们使用复杂的数组/散列时,它会变得很难。我花了几个小时寻找解决办法。再次感谢您的解释,非常有用!现在,我可以简单地访问数据。对于您的编辑:好的,没有重复。(这是第一个和第二个字段上的SQL group_by的结果。)但后面会,ruby,Ruby,通常,它会给我们期望的结果。当我们使用复杂的数组/散列时,它会变得很难。我花了几个小时寻找解决办法。再次感谢您的解释,非常有用!现在,我可以简单地访问数据。对于您的编辑:好的,没有重复。(这是第一个和第二个字段上的SQL group_by的结果。)但后面会有意思。Daniël关于代码破坏性的观点很重要!如果您想销毁在方法中创建的对象,但我怀疑销毁参数是否是一个好主意。谁知道您的代码将来会变成什么样子,或者谁将对此负责?当我们将一个对象传递给一个方法时,我们希望它受到尊重,所以如果它被滥用,就会发
通常,它会给我们期望的结果。当我们使用复杂的数组/散列时,它会变得很难。我花了几个小时寻找解决办法。再次感谢您的解释,非常有用!现在,我可以简单地访问数据。对于您的编辑:好的,没有重复。(这是第一个和第二个字段上的SQL group_by的结果。)但后面会有意思。Daniël关于代码破坏性的观点很重要!如果您想销毁在方法中创建的对象,但我怀疑销毁参数是否是一个好主意。谁知道您的代码将来会变成什么样子,或者谁将对此负责?当我们将一个对象传递给一个方法时,我们希望它受到尊重,所以如果它被滥用,就会发生非常糟糕的事情。当然,故意修改参数(根据调用方法的需要)是另一回事。当我们使用复杂的数组/散列时,它变得非常困难。我花了几个小时寻找解决办法。再次感谢您的解释,非常有用!现在,我可以简单地访问数据。对于您的编辑:好的,没有重复。(这是第一个和第二个字段上的SQL group_by的结果。)但后面会有意思。Daniël关于代码破坏性的观点很重要!如果您想销毁在方法中创建的对象,但我怀疑销毁参数是否是一个好主意。谁知道您的代码将来会变成什么样子,或者谁将对此负责?当我们将一个对象传递给一个方法时,我们希望它受到尊重,所以如果它被滥用,就会发生非常糟糕的事情。当然,故意修改参数(根据调用方法的需要)是另一回事。谢谢你,我也会检查你的代码,以了解它是如何工作的,但与Daniël Knippers的代码几乎相同。@Alexis_user Yes,除了它使用
.inject
,而不是像我一样在循环上方声明结果。其余的都一样,只是我在一行上挤了更多的东西。不知道为什么它获得了更多的选票;)同样感谢您,我将检查您的代码以了解其工作原理,但与Daniël Knippers的代码几乎相同。@Alexis_用户是的,只是它使用.inject
,而不是像我一样在循环上方声明结果。其余的都一样,只是我在一行上挤了更多的东西。不知道为什么它获得了更多的选票;)啊哈,也谢谢你!另一种方法,但使用map
和groupby
,很好学;)啊哈,也谢谢你!另一种方法,但使用map
和groupby
,很好学;)哇,这真是个教训!非常感谢。我现在更懂ruby了!正是由于这个例子的类型,我学到了越来越多的Ruby!哇,这真是个教训!非常感谢。我现在更懂ruby了!正是由于这个例子的类型,我学到了越来越多的Ruby!
a = [ [1, 0, "a", "b"], [1, 1, "c", "d"], [2, 0, "e", "f"], [3, 1, "g", "h"] ]
b= {
1=> {0=>["a", "b"], 1=>["c", "d"]} ,
2=> {0=>["e", "f"]} ,
3=> {1=>["g", "h"]}
}
a.group_by{ |e| e.shift}.map { |k, v| {k=>v.group_by{ |e| e.shift}} }
=> [{1=>{0=>[["a", "b"]], 1=>[["c", "d"]]}},
{2=>{0=>[["e", "f"]]}}, {3=>{1=>[["g", "h"]]}}]
b = {}
a.each do |aa|
(b[aa[0]] ||= {})[aa[1]] = aa[2..3]
end
b # => {1=>{0=>["a", "b"], 1=>["c", "d"]}, 2=>{0=>["e", "f"]}, 3=>{1=>["g", "h"]}}
# Added [1, 1, "x", "y"], removed some others
a = [ [1, 0, "a", "b"], [1, 1, "c", "d"], [1, 1, "x", "y"] ]
b = Hash[a.group_by(&:shift).map { |k, v| [k, v.group_by(&:shift) ] }]
#=> {1=>{0=>[["a", "b"]], 1=>[["c", "d"], ["x", "y"]]}}
a = [ [1, 0, "a", "b"], [1, 1, "c", "d"], [2, 0, "e", "f"], [3, 1, "g", "h"] ]
result = a.inject({}) do |acc,(a,b,c,d)|
acc[a] ||= {}
acc[a][b] = [c,d]
acc
end
puts result.inspect
{1=>{0=>["a", "b"], 1=>["c", "d"]}, 2=>{0=>["e", "f"]}, 3=>{1=>["g", "h"]}}
[[1, 0, "a", "b"], [1, 1, "c", "d"], [2, 0, "e", "f"], [3, 1, "g", "h"]].
group_by{ |e| e.shift }.
map{ |k, v| [k, v.inject({}) { |h, v| h[v.shift] = v; h }] }.
to_h
#=> {1=>{0=>["a", "b"], 1=>["c", "d"]}, 2=>{0=>["e", "f"]}, 3=>{1=>["g", "h"]}}
def convert(arr)
h = arr.group_by(&:first)
h.keys.each { |k| h[k] = h[k].group_by { |a| a[1] }
.tap { |g| g.keys.each { |j|
g[j] = g[j].first[2..-1] } } }
h
end
a = [ [1, 0, "a", "b"], [1, 1, "c", "d"], [2, 0, "e", "f"], [3, 1, "g", "h"] ]
convert(a)
#=> {1=>{0=>["a", "b"], 1=>["c", "d"]}, 2=>{0=>["e", "f"]}, 3=>{1=>["g", "h"]}}
h = a.group_by(&:first)
#=> {1=>[[1, 0, "a", "b"], [1, 1, "c", "d"]],
# 2=>[[2, 0, "e", "f"]],
# 3=>[[3, 1, "g", "h"]]}
keys = h.keys
#=> [1, 2, 3]
f = h[k].group_by { |a| a[1] }
#=> [[1, 0, "a", "b"], [1, 1, "c", "d"]].group_by { |a| a[1] }
#=> {0=>[[1, 0, "a", "b"]], 1=>[[1, 1, "c", "d"]]}
g.keys #=> [0, 1]
g[j] = g[j].first[2..-1]
#=> g[0] = [[1, 0, "a", "b"]].first[2..-1]
#=> ["a", "b"]
g[j] = g[j].first[2..-1]
#=> g[1] = [[1, 1, "c", "d"]].first[2..-1]
#=> ["c", "d"]
h[1] = g
#=> {0=>["a", "b"], 1=>["c", "d"]}