1

私はルビーで働いています。各キー/値を取得して、文字列に入れる必要があります。

これまでのところ、私は持っています:

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

印刷すると、次の@thelinkように表示されます。

first1second2=&

でも本当に欲しいのは

first=1&second=2

誰か助けて/説明してくれませんか?

4

2 に答える 2

2

ここで見逃している微妙なものがあり{}ます[]

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]

配列には、文字列としてすべてが連結された単一の要素 (ハッシュ) があります。これはここで注意すべき重要なことです。
一方、ハッシュは、予想されるキーと値のペアを渡すことによって反復します。

それが役立つことを願っています。

于 2013-01-28T15:24:35.563 に答える
1

コードにタイプミスがあると思います (ハッシュは [] ではなく {} で区切られています)。これを試して

values = {'first' => '1', 'second' => '2'}
r = values.map{|k,v| "#{k}=#{v}"}.join('&')
puts r
#shows: first=1&second=2
于 2013-01-28T15:31:38.927 に答える