Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组包含字符串ruby?_Ruby_Arrays - Fatal编程技术网

数组包含字符串ruby?

数组包含字符串ruby?,ruby,arrays,Ruby,Arrays,如何检查数组是否包含字符串元素 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 = '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?


代码的问题是.match是正则表达式的一种方法,并且您的字符串副本中没有一个包含地址。所以你每次都应该得到你的地址,因为你的if语句总是指向else

'city=all_cities.index{| x | x.match/address/}
如果城市
返回所有城市[城市]”


尝试使用。包括?作为此场景中的方法

我建议使用带分词的正则表达式(
\b


问题:

city=all_cities.index{| x | x.match/address/}

它将
address
视为字符串而不是变量,因此每次代码进入else块时,都会给出整个地址

解决方案:

如果要对字符串进行不区分大小写的比较,请使用:

city=all_cities.index{x|x.match/{address}/i}

  • 在上面的语句中,注意到
    地址
    已包装在
    {}
  • i
    选项传递给match将使其不区分大小写
其他用途:

city=all_cities.index{| x | x.include?address}


因为
include?
的性能比
match

好,你能解释一下你到底想要什么(输入和输出)吗?
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
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