Ruby on Rails从二维数组中获取值

时间:2012-04-20 21:09:07

标签: ruby-on-rails ruby

我有一个二维数组,如下所示:

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

我需要获取值1的键(例如,应该是'Ms.') 我应该怎么做呢?

4 个答案:

答案 0 :(得分:8)

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

如何运作

您可以使用Arrayselect方法查找您要查找的行。你的行ar数组每个都有两个元素(元素0和元素1),所以你需要查找第二个元素(元素1)等于你要查找的值的行(字符串{{ 1}}):

"1"

这将返回一个只有一行的数组:

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

要从该数组中获取第一个也是唯一的值,请使用[["Ms.", "1"]] 的{​​{3}}方法,该方法将返回:

Array

然后,从那里,再次使用["Ms.", "1"] 从两个值中获取第一个值:

first

答案 1 :(得分:2)

实际上,Array#rassoc之类的声音对你来说是完美的。

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

请参阅Ruby-doc上的文档。

答案 2 :(得分:0)

更自然地,您应该将这些信息保留为哈希值。如果您经常需要键值,并且键值是唯一的,那么创建一个哈希:

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

并访问它:

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

或创建像:

这样的哈希
TYTLETYPEHASH = Hash[TYTLETYPE]

并访问它:

TYTLEHASH.key('1') # => 'Ms.' 

答案 3 :(得分: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>