我有一个数组如下
headers = Array["RATE THIS MOVIE", "SHOWTIMES FOR TODAY, FEB 25", "MOVIE INFO", "PHOTOS", "CAST", "CRITIC REVIEWS", "USER REVIEWS"]
现在我想检查它的元素是否包含子串“SHOWTIMES”
如果是,那么我希望它将该元素添加到另一个数组
new_header= ["SHOWTIMES FOR TODAY, FEB 25", ....]
我尝试了下面的内容,但它给了我错误信息
# undefined local variable or method `s` for #<MovieDetails:0x007f939b956420> (NameError)
if ( headers.any? { |s| s.include?('SHOWTIMES') } )
headers.push('s')
end
请咨询
答案 0 :(得分:2)
使用grep
。
new_header = headers.grep(/SHOWTIMES/)
答案 1 :(得分:1)
使用.select
和.match
new_headers = headers.select { |s| s.match(/SHOWTIMES/) }
=> ["SHOWTIMES FOR TODAY, FEB 25"]
答案 2 :(得分:0)
if ( headers.any? { |s| s.include?('SHOWTIMES') } )
new_header.push('s')
end
此代码不起作用的原因是s
是仅存在于块{ |s| s.include?('SHOWTIMES') }
一旦你在那个街区之外 - s
就会消失。
所以你必须做一些使用s
的事情 - 虽然它仍然存在。
有几种方法可以做到这一点。
首先 - 你可以尝试在一个区块内进行...例如:
headers.each { |s|
if s.include?('SHOWTIMES')
new_header.push(s)
end
}
但更好的方法是使用其他评论中解释的匹配方法:
# select will pick out the ones that match your criteria
new_header = headers.select{|s| s.include?('SHOWTIMES') }
# match is also a powerful way of doing this if what you want to match
# is more complicated (google "ruby regex")
new_header = headers.select{|s| s.match?(/SHOWTIMES/) }