迭代数组并使用ruby中的给定字符串搜索匹配元素

问题描述 投票:2回答:3

如果我有像这样的数组

names = ["John", "Sam", "Sandy", "Andrew", "Charlie"]

我必须编写一个接收数组作为参数的方法。在该方法内部,使用每个方法迭代数组。如果名称以“S”开头,则输出消息。

我该怎么做呢?到目前为止我只有

names.each do |i|
   puts i
end
ruby-on-rails arrays ruby loops each
3个回答
2
投票

你可以试试start_with?

names = ["John", "Sam", "Sandy", "Andrew", "Charlie"]

names.each do |name|
  puts 'output a message' if name.start_with?('S')
end
# output a message (for Sam)
# output a message (for Sandy)

3
投票

Ruby 1.9.2引入了start_with?,它将一个字符串作为参数引入并检查其在另一个字符串中的存在。

在你的情况下,你可以这样做。

names.each do |name|
  puts 'output a message' if name.start_with?('S')
end

但对于更真实的场景,你应该做两件事。

  1. 名称也可以以's'而不是'S'开头,因此请搜索两者。
  2. 它可能在实际名称之前有空格。使用.strip方法尾随空格然后搜索。

所以你应该像这样搜索更实用的场景。

names = ["John", "sam", " Sandy", "Andrew", "Charlie"]

names.each do |name|
  puts 'output a message' if name.strip.start_with?('s', 'S')
end

0
投票

Ruby的方法是使用带有块的select或带有正则表达式的grep来过滤以'S'开头的名称,然后使用each来显示所选的名称:

names = ["John", "Sam", "Sandy", "Andrew", "Charlie"]

s_names = names.grep(/^s/i)
# or
s_names = names.select{ |name| name.downcase.start_with?('s') }

s_names.each do |name|
  puts "'#{name}' starts with an 'S'"
end
# 'Sam' starts with an 'S'
# 'Sandy' starts with an 'S'
© www.soinside.com 2019 - 2024. All rights reserved.