迭代对象数组的最简单方法是,查看对象属性的字符串是否包含单词,然后保持匹配的结果?
我认为这样可行:
@events = @events.map {|n| n if n.game.to_s.include?(game.to_s)}.compact
但我明白了:
NoMethodError: undefined method `map' for nil:NilClass
n.game可以等于nil,也可以是像“Pokemon,MarioKart”这样的字符串。
答案 0 :(得分:0)
你想要#select,也称为#find_all。这样做你想要的,不需要做一个紧凑的地图,只需使用find_all
matching_events = @events.find_all {|e| n.game.to_s.include?(game.to_s) }
http://ruby-doc.org/core-2.2.3/Enumerable.html#method-i-find_all
但是,如果您收到undefined method map for nil:NilClass
,则表示您的@events
变量中没有对象。如果您实际上有一个要在@events中过滤的数组,那么您的代码也会起作用。您必须先将其设置为要过滤的数组,然后才能对其进行过滤。