如果我有像这样的数组
names = ["John", "Sam", "Sandy", "Andrew", "Charlie"]
我必须编写一个接收数组作为参数的方法。在该方法内部,使用每个方法迭代数组。如果名称以“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
但对于更真实的场景,你应该做两件事。
.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
或带有正则表达式的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'