Ruby循环。哈希成串

时间:2013-01-28 15:23:03

标签: ruby oop loops

我正在使用Ruby。我需要抓取每个键/值并将其放入一个字符串中。

到目前为止,我有:

values = ['first' => '1', 'second' => '2']
  @thelink = values.collect do | key, value |
  "#{key}=#{value}&"
  end

当我打印@thelink时,我看到了:

first1second2=&

但真正想要的是

first=1&second=2

有人可以帮忙/解释一下吗?

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