1

次のような2次元配列があります。

TITLETYPE = [['Prof.', '4'],
  ['Dr.', '3'],
  ['Mrs.', '2'],
  ['Ms.', '1'],
  ['Mr.', '0']]

たとえば、値1のキーを取得する必要があります(これは「Ms.」である必要があります)。どうすればよいですか?

4

4 に答える 4

8
TITLETYPE.select{ |x| x[1] == '1' }.first.first

これがどのように機能するか

Arrayのメソッドを使用selectして、探している行を見つけることができます。行はそれぞれ 2 つの要素 (要素 0 と要素 1) を持つ配列であるため、2 番目の要素 (要素 1) が探している値 (文字列"1")と等しい行を探す必要があります。

TITLETYPE.select{ |x| x[1] == "1" }

これは、1 行のみの配列を返します。

[["Ms.", "1"]]

その配列から最初で唯一の値を取得するには、Arrayfirstメソッドを使用します。次の値が返されます。

["Ms.", "1"]

次に、それから、2 つの値から最初の値をfirst再度取得します。

"Ms."
于 2012-04-20T21:10:34.847 に答える
3

実際、Array#rassocあなたにぴったりのようですね。

TITLETYPE.rassoc('1')[0] # => 'Ms.'

Ruby-docのドキュメントを参照してください。

于 2013-02-28T20:37:43.313 に答える
0

同様の問題があり、次のようなものを使用するだけで解決しました。

<% Array.each do |value| %>

を使用して各要素にアクセスする<%= value[:keyname] %>

すなわち

このような配列 (.inspect を使用)

  [{:id=>1, :title=>"ABC"}, {:id=>2, :title=>"XYZ"}]

以下を使用して、HTML 選択/ドロップダウン ボックスにすることができます。

 <select name="ClassName[TargetParameter]">
    <% Array.each do |value| %>
      <option value="<%= value[:id] %>"><%= value[:title] %></option>
    <% end %>
 </select>
于 2014-11-04T05:11:50.663 に答える
0

より自然に、そのような情報をハッシュとして保持する必要があります。key-to-value が頻繁に必要で、key-to-value が一意である場合は、ハッシュを作成します。

TYTLETYPEHASH = Hash[TYTLETYPE.map(&:reverse)]

そしてそれにアクセスします:

TYTLETYPEHASH['1'] # => 'Ms.' 

または次のようなハッシュを作成します。

TYTLETYPEHASH = Hash[TYTLETYPE]

そしてそれにアクセスします:

TYTLEHASH.key('1') # => 'Ms.' 
于 2012-04-20T21:41:02.073 に答える