我正在使用Ruby。我需要抓取每个键/值并将其放入一个字符串中。
到目前为止,我有:
values = ['first' => '1', 'second' => '2']
@thelink = values.collect do | key, value |
"#{key}=#{value}&"
end
当我打印@thelink
时,我看到了:
first1second2=&
但真正想要的是
first=1&second=2
有人可以帮忙/解释一下吗?
答案 0 :(得分: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]
数组有一个元素(一个哈希),作为一个字符串,是连接的所有东西。这是需要注意的重要事项 另一方面,哈希通过处理您期望的键/值对来迭代。
希望有所帮助。
答案 1 :(得分:1)
我认为您的代码有一个拼写错误(散列由{}分隔,而不是由[]分隔。试试这个
values = {'first' => '1', 'second' => '2'}
r = values.map{|k,v| "#{k}=#{v}"}.join('&')
puts r
#shows: first=1&second=2