簡體   English   中英

遍歷數組,並在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

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

您可以嘗試使用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的方法是將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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM