我有以下格式的数据结构: data_hash = [ { price: 1, count: 3 }, { price: 2, count: 3 }, { price: 3, count: 3 }, ] 有没有一种有效的方法来获取:price [1,2,3]这样的数组:price ?
这与在Ruby中将一列数组变成一个哈希数组是相反的。 优雅地和/或有效地将散列数组转换为散列,其中值是所有值的数组: hs = [ { a:1, b:2 }, { a:3, c:4 }, { b:5, d:6 } ] collect_values( hs ) #=> { :a=>[1,3], :b=>[2,5], :c=>[4], :d=>[6] } 这个简洁的代码几乎可以工作,但在没有重复的情况下无法创build数组: def collect_values( hashes ) hashes.inject({}){ |a,b| a.merge(b){ |_,x,y| [*x,*y] } } end collect_values( hs ) #=> { :a=>[1,3], :b=>[2,5], :c=>4, :d=>6 } 这个代码有效,但是你能写一个更好的版本吗? def collect_values( hashes […]
我有一个数组,我想做一个散列,所以我可以很快问“数组中的X?”。 在Perl中,有一个简单(快速)的方法来做到这一点: my @array = qw( 1 2 3 ); my %hash; @hash{@array} = undef; 这生成一个哈希看起来像: { 1 => undef, 2 => undef, 3 => undef, } Ruby中最好的是: array = [1, 2, 3] hash = Hash[array.map {|x| [x, nil]}] 这使: {1=>nil, 2=>nil, 3=>nil} 有更好的Ruby方法吗? 编辑1 不,Array.include? 不是一个好主意。 它很慢 。 它在O(n)而不是O(1)中进行查询。 我的示例数组有三个简洁的元素; 假设实际有一百万个元素。 让我们做一点基准: #!/usr/bin/ruby -w […]
例如,我有一些单一的哈希 a = [{a: :b}, {c: :d}] 什么是最好的办法将其转换成此? {a: :b, c: :d}
我有这样的散列数组: [{"testPARAM1"=>"testVAL1"}, {"testPARAM2"=>"testVAL2"}] 我试图把这个映射到单个哈希像这样: {"testPARAM2"=>"testVAL2", "testPARAM1"=>"testVAL1"} 我已经实现了使用 par={} mitem["params"].each { |h| h.each {|k,v| par[k]=v} } 但我想知道是否有可能以更习惯的方式做到这一点(最好不使用局部variables)。 我怎样才能做到这一点?
我有一个简单的数组: arr = ["apples", "bananas", "coconuts", "watermelons"] 我也有一个函数f ,将执行单个stringinput操作并返回一个值。 这个操作非常昂贵,所以我想在hash里记下结果。 我知道我可以用这样的东西做所需的散列: h = {} arr.each { |a| h[a] = f(a) } 我想要做的就是不必初始化h,这样我就可以写下这样的内容: h = arr.(???) { |a| a => f(a) } 可以这样做吗?
我有两个数组 a = [:foo, :bar, :baz, :bof] 和 b = ["hello", "world", 1, 2] 我想要 {:foo => "hello", :bar => "world", :baz => 1, :bof => 2} 任何方式来做到这一点?
我有这个: hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] } 我想得到这个: [["a","b","c"],["b","c"]] 这似乎应该工作,但它不: hash.each{|key,value| value} => {"a"=>["a", "b", "c"], "b"=>["b", "c"]} 有什么build议么?
要检查@some_var是什么,我正在做一个 if @some_var.class.to_s == 'Hash' 我相信有一个更优雅的方式来检查@some_var是一个Hash或Array 。