我是Ruby的新手,所以答案可能非常简单。不是我,但
我正在获取一个字符串数组(A)并将其与另一个字符串数组(B)进行匹配,以查看来自(A)的给定字符串是否作为B中字符串中的子字符串存在。
比较似乎有效,但我只从最后一个(A)字符串中得到结果。
这可能是什么?
def checkIfAvailableOnline(film)
puts "Looking for " + film
lowerCaseFilm = film.downcase
#iterate through the linesarray scanning for the film in question
for line in @linesArray
#get the line in lowercase
lowerCaseLine = line.downcase
#look for the film name as a substring within the line
results = lowerCaseLine.scan(lowerCaseFilm)
if results.length > 0
@availableOnlineArray << results
end
end
end
#-----------------------------------------
listFilmsArray.each {|line| checkIfAvailableOnline(line)}
答案 0 :(得分:1)
给出一系列电影名称:
FILM_NAMES = [
'Baked Blue Tomatoes',
'Fried Yellow Tomatoes',
'The thing that ate my homework',
'In a world where',
]
然后找到包含子串的所有电影名称,忽略大小写:
def find_films_available_online(partial_film_name)
FILM_NAMES.find_all do |film_name|
film_name.downcase[partial_film_name.downcase]
end
end
p find_films_available_online('tomatoes')
# => ["Baked Blue Tomatoes", "Fried Yellow Tomatoes"]
p find_films_available_online('godzooka')
# => []
要了解电影名称是否可在线获取:
def available_online?(partial_film_name)
!find_films_available_online(partial_film_name).empty?
end
p available_online?('potatoes') # => false
p available_online?('A World') # => true
要了解哪些部分电影名称可在线获取:
def partial_film_names_available_online(partial_film_names)
partial_film_names.find_all do |partial_film_name|
available_online?(partial_film_name)
end
end
p partial_film_names_available_online [
'tomatoes',
'potatoes',
'A World',
]
# => ["tomatoes", "A World"]
答案 1 :(得分:0)
更为谨慎的做法是:
鉴于我们正在寻找一系列电影:
@films = ["how to train your dragon", "kung fu panda", "avatar"]
给出一系列可能包含我们正在寻找的电影的行:
@lines_array = ["just in kung fu panda", "available soon how to train your dragon"]
如果电影名称存在于一行中,则提前返回;如果在搜索完所有行后没有,则返回false:
def online_available(film)
@lines_array.each do |l|
l.downcase.include?(film) ? (return film) : false
end
false
end
检查线条中拒绝返回false的影片,打印它们并最终返回我们找到的匹配数组:
def films_available
available = @films.collect{ |x| p "Looking for: #{x}"; online_available(x) }
.reject{ |x| x == false }
available.each{|x| p "Found: #{x}"}
available
end
在使用Ruby的方法名称中使用camel-case被认为是不好的风格,但你知道他们对意见的看法。
.each是一个内部迭代器,我很确定“for”循环的运行速度会慢于数组继承的每个可枚举方法。