通过其内容获取数组的元素

时间:2014-02-14 03:29:44

标签: ruby arrays

对于奇怪的措辞,我很抱歉。我不知道你叫什么。我有这个数组:

[#<Item:0x007faeea066508 @name="Backpack", @exam="Not much here... just a backpack">]

这是一个库存数组。用户将键入类似“检查背包”的内容,它将返回元素的@exam。你怎么会只知道@name?谢谢!

4 个答案:

答案 0 :(得分:1)

你可能想要选择一个块(假设你的Item类响应.name和.exam:

items = [#<Item:0x007faeea066508 @name="Backpack", @exam="Not much here... just a backpack">]
item = items.select {|i| i.name =~ /backpack/i }
puts item.exam

答案 1 :(得分:1)

这就是你所拥有的:

class Item
  # accessors for @name and @exam possibly defined here
  def initialize(name, exam)
    @name = name
    @exam = exam
  end
  # methods possibly defined here
end

item = Item.new("Backpack", "Just a backpack")
  #=> #<Item:0x0000010201dda0 @name="Backpack", @exam="Just a backpack"> 

所以你有一个数组a有一个元素,类Item的实例,实例变量@name@exam的值为“Backpack”和“Just”一个背包“,分别是:

a = [item]
  #=> [#<Item:0x0000010201dda0 @name="Backpack", @exam="Just a backpack">]

您可以使用Object#instance_variable_get来检索实例变量@name@exam的值,我将将其存储在本地变量nameexam中:

name = a.first.instance_variable_get(:@name) #=> "Backpack" 
exam = a.first.instance_variable_get(:@exam) #=> "Just a backpack" 

现在您已拥有这些变量的值,您可以随意使用它们。

答案 2 :(得分:0)

这是我的代码:

articles = ArticleType.all

我的结果:

[#<ArticleType id: 1, name: "News", slug: "news">, #<ArticleType id: 2, name: "Articles", slug: "articles">]

获取第一个元素的名称值:

articles[0].name
=> "News"

获取数组的名称值:

ArticleType.all.map(&:name)

获取包含'N'的元素:

ArticleType.all.map { |x| puts x.name if x.name.include?('N') }
=> News

我希望它可以帮到你!

答案 3 :(得分:0)

您可以执行以下操作: -

user_typed_string =  "examine backpack" 

items = [#<Item:0x007faeea066508 @name="Backpack", @exam="Not much here... just a backpack">]

item = items.select {|i| user_typed_string.include?(i.name) }.last

exam = item.exam unless item.nil?