我正在使用红宝石。我需要抓取每个键/值并将其放入一个字符串中。
到目前为止,我有:
values = ['first' => '1', 'second' => '2']
@thelink = values.collect do | key, value |
"#{key}=#{value}&"
end
当我打印时,@thelink
我看到:
first1second2=&
但我真正想要的是
first=1&second=2
有人可以帮忙/解释一下吗?
你在这里缺少一些微妙的东西{}
vs []
。
请参阅 IRB 测试中的以下内容:
irb(main):002:0> {'first' => 1, 'second' => 2}
=> {"second"=>2, "first"=>1}
irb(main):003:0> ['first' => 1, 'second' => 2]
=> [{"second"=>2, "first"=>1}]
irb(main):004:0> {'first' => 1, 'second' => 2}.class
=> Hash
irb(main):005:0> ['first' => 1, 'second' => 2].class
=> Array
与此类似:
irb(main):006:0> {'first' => 1, 'second' => 2}.collect { |key,value| puts "#{key}:#{value}" }
second:2
first:1
=> [nil, nil]
irb(main):007:0> ['first' => 1, 'second' => 2].collect { |key,value| puts "#{key}:#{value}" }
second2first1:
=> [nil]
该数组有一个元素(散列),作为一个字符串,它是所有连接在一起的元素。这是这里要注意的重要一点。
另一方面,哈希通过将您期望的键/值对交给您来进行迭代。
希望有帮助。
我认为您的代码有错字(哈希由 {} 而不是 [] 分隔)。试试这个
values = {'first' => '1', 'second' => '2'}
r = values.map{|k,v| "#{k}=#{v}"}.join('&')
puts r
#shows: first=1&second=2