簡體   English   中英

數組包含字符串紅寶石?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM