遍历数组并在 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
但对于更真实的生活场景,您应该做两件事。
- 名称也可以以 's' 开头,而不是 'S',所以搜索两者。
- 真实姓名前可以有空格。使用
.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'
如果我有一个像
这样的数组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
但对于更真实的生活场景,您应该做两件事。
- 名称也可以以 's' 开头,而不是 'S',所以搜索两者。
- 真实姓名前可以有空格。使用
.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'