[英]Array includes string ruby?
如何檢查數組是否包含字符串元素?
address = 'London is a capital of GB'
def get_location(address)
all_cities = ['Amsterdam','Moscow','Krakow','London']
city = all_cities.index {|x| x.match /address/ }
if city
return all_cities[city]
else
address
end
end
但是它返回了我的完整地址
我需要從字符串中返回城市的名稱
使用include?
檢查字符串是否包含子字符串 。
address = 'London is a capital of GB'
def get_location(address)
all_cities = ['Amsterdam','Moscow','Krakow','London']
city = all_cities.index { |x| address.include? x }
if city
return all_cities[city]
else
address
end
end
puts get_location address
# output: London
您的代碼的問題是.match是用於正則表達式的方法,並且您的字符串均未在其副本中包含地址。 因此,您應該每次都獲取地址,因為您的if語句總是轉到else。
'city = all_cities.index {|x| x.match /address/ } if city return all_cities[city]'
嘗試使用.includes嗎? 作為您在這種情況下的方法。
我建議使用帶分號( \\b
)的正則表達式
cities = ['Amsterdam','Moscow','Krakow','London']
def find_city(cities, address)
cities.find { |city| address =~ /\b#{city}\b/ }
end
find_city(cities, 'London is a capital of GB')
#=> "London"
find_city(cities, 'Londonderry is not in London')
#=> "London"
find_city(cities, 'Toledo is not the capital of BG')
#=> nil
問題:
city = all_cities.index {|x| x.match /address/ }
它會將address
視為字符串而不是變量,因此,每次您的代碼進入else塊時,它就會為您提供完整的地址。
解:
如果要對字符串進行不區分大小寫的比較,請使用:
city = all_cities.index {|x| x.match /#{address}/i }
address
已包裝在#{}
。 i
選項進行匹配使其不區分大小寫。 其他使用:
city = all_cities.index {|x| x.include? address }
因為include?
比match
表現更好
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.