2014-02-14 107 views
0

对于奇怪的措辞,我很抱歉。我不知道你在说什么。我有这个数组:通过其内容获取数组的元素

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

这是一个库存数组。用户将输入类似“检查背包”的东西,它将返回元素的@exam。如果只知道@name,你会如何获得该元素?谢谢!

+0

如果读者对这个数组感到困惑,它会包含一个元素:类Item的一个实例。 –

回答

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分别具有“背包”和“只是背包”的值:

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" 

现在,你有这些变量的值,你可以做无论你喜欢他们。

1

你可能想使用块(假设你的项目类回应。名称和.exam选择:

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

我希望它可以帮助你!

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?