遍历数组并在 ruby 中搜索具有给定字符串的匹配元素

Iterating over an array and searching the matching element with a given string in ruby

如果我有一个像

这样的数组
names = ["John", "Sam", "Sandy", "Andrew", "Charlie"]

而且我不得不编写一个将数组作为参数的方法。在该方法内,使用 each 方法遍历数组。如果名称以“S”开头,则输出一条消息。

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

names.each do |i|
   puts i
end

你可以试试 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)

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

Ruby的方法是先用select with a block or 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'