2014-02-25 52 views
0

我有一個數組,如下如何插入元素中包含一個字符串的數組,到另一個陣列

headers = Array["RATE THIS MOVIE", "SHOWTIMES FOR TODAY, FEB 25", "MOVIE INFO", "PHOTOS", "CAST", "CRITIC REVIEWS", "USER REVIEWS"] 

現在我要檢查,如果它的元素包含子串「放映時間」

如果是的話,我想它該元素添加到另一個陣列

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

你的文章說你正在處理一個字符串數組,但是這個錯誤信息表明你正在對'MovieDetails'類的一個對象調用方法's'。這是什麼? –

+0

對不起,我只是複製粘貼的錯誤信息是......錯誤信息是未定義的局部變量。請忽略錯誤消息中的其他詳細信息。 – napsterdsilva

+0

它實際上是使錯誤信息有用的細節。 –

回答

1

使用.select.match

new_headers = headers.select { |s| s.match(/SHOWTIMES/) } 
    => ["SHOWTIMES FOR TODAY, FEB 25"] 
2

使用grep

new_header = headers.grep(/SHOWTIMES/) 
+1

總是最簡單的答案! +1 – Abdo

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/) } 
+1

感謝您的詳細解釋,這有助於解決問題。 :) – napsterdsilva

相關問題