次のような2次元配列があります。
TITLETYPE = [['Prof.', '4'],
['Dr.', '3'],
['Mrs.', '2'],
['Ms.', '1'],
['Mr.', '0']]
たとえば、値1のキーを取得する必要があります(これは「Ms.」である必要があります)。どうすればよいですか?
次のような2次元配列があります。
TITLETYPE = [['Prof.', '4'],
['Dr.', '3'],
['Mrs.', '2'],
['Ms.', '1'],
['Mr.', '0']]
たとえば、値1のキーを取得する必要があります(これは「Ms.」である必要があります)。どうすればよいですか?
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"]]
その配列から最初で唯一の値を取得するには、Array
のfirst
メソッドを使用します。次の値が返されます。
["Ms.", "1"]
次に、それから、2 つの値から最初の値をfirst
再度取得します。
"Ms."
同様の問題があり、次のようなものを使用するだけで解決しました。
<% 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>
より自然に、そのような情報をハッシュとして保持する必要があります。key-to-value が頻繁に必要で、key-to-value が一意である場合は、ハッシュを作成します。
TYTLETYPEHASH = Hash[TYTLETYPE.map(&:reverse)]
そしてそれにアクセスします:
TYTLETYPEHASH['1'] # => 'Ms.'
または次のようなハッシュを作成します。
TYTLETYPEHASH = Hash[TYTLETYPE]
そしてそれにアクセスします:
TYTLEHASH.key('1') # => 'Ms.'