如何将包含子字符串的Array中的Element插入另一个数组中

时间:2014-02-25 22:55:08

标签: ruby arrays

我有一个数组如下

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

请咨询

3 个答案:

答案 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/) }