1

我有一个看起来像这样的二维数组:

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

例如,我需要获取值 1 的密钥(应该是“女士”)我应该怎么做呢?

4

4 回答 4

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

这是如何工作的

您可以使用Array'select方法找到您要查找的行。您的行 ar 数组每个都有两个元素(元素 0 和元素 1),因此您需要查找第二个元素(元素 1)等于您要查找的值(即字符串"1")的行:

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

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

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

要从该数组中获取第一个也是唯一的值,请使用Array'sfirst方法,该方法将返回:

["Ms.", "1"]

然后,从那里,再次从这两个值中获得第一个值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

更自然地,您应该将此类信息保存为哈希。如果你经常想要 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 回答
0

我有一个类似的问题,并通过简单地使用这样的东西来解决它:

<% Array.each do |value| %>

并使用访问每个元素<%= value[:keyname] %>

IE

一个看起来像这样的数组(使用 .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 回答