子我有一個數組:對陣陣
my_arr = ["PR", "PM", "EM", "SM", "ST"]
和一個字符串:
my_str = "5012PR152"
我想看看該字串是否包括任何數組中的字符串。如果數組中的字符串只是一個,這會工作:
my_str.include?("PR")
,但我不能字符串數組作爲參數傳遞給include?
。我怎麼去解決這個問題?
子我有一個數組:對陣陣
my_arr = ["PR", "PM", "EM", "SM", "ST"]
和一個字符串:
my_str = "5012PR152"
我想看看該字串是否包括任何數組中的字符串。如果數組中的字符串只是一個,這會工作:
my_str.include?("PR")
,但我不能字符串數組作爲參數傳遞給include?
。我怎麼去解決這個問題?
my_arr.inject(false) { |m, e| m ||= my_str.include? e }
這將返回正確的答案,但缺乏提前;我沒有看到一個精闢的方式來獲得這個。
或者,它可能是有趣的猴子補丁String此...
class String
def anyinclude? a
a.each do |e|
if include? e
return true
end
end
return false
end
end
my_arr = ["PR", "PM", "EM", "SM", "ST"]
p "5012PR152".anyinclude? my_arr
這真棒的一部分將是我可以返回'E',而不是真正的,如果有一場比賽。 – idalsin
好主意,在這種情況下,返回nil而不是false。 – DigitalRoss
試試這個
def include_substring(str, arr)
str.chars.each_cons(2).to_a.any? { |a,b| arr.include?([a,b].join('')) }
end
include_substring('5012PR152', ['PR', QZ'])
=> true
擊穿
chars
- 將一個字符串轉換爲每個字符數組
each-cons(2)
- 分區此陣爲兩個
any?
塊查找是否存在陣列中的元素符合以下條件
在下面的塊中,我們想要傳入兩個元素作爲參數,並查看組合數組是否包含上述兩個元素的連接。
您可以使用可枚舉的方法any?
這需要一個塊,如果任何一個結果是什麼,但將返回true假/爲零。
然後,您可以在塊中使用您的my_arr
數組,以便使用indlude?()
方法檢查字符串。
這最終會看起來像這樣:
my_arr.any? { |a| my_string.include?(a) }
或者,您可以創建將爲你做這個以備將來使用的方法。這可能是這個樣子:
class String
def any_include?(array)
array.any? { |a| include?(a) }
end
end
,你可以在一個字符串調用與my_str.any_include?(my_arr)
2.1.2 :001 > class String
2.1.2 :002?> def any_include?(array)
2.1.2 :003?> array.any? { |a| include?(a) }
2.1.2 :004?> end
2.1.2 :005?> end
=> :any_include?
2.1.2 :006 > my_arr = ["PR", "PM", "EM", "SM", "ST"]
=> ["PR", "PM", "EM", "SM", "ST"]
2.1.2 :007 > my_str = "5012PR152"
=> "5012PR152"
2.1.2 :008 > my_str.any_include?(my_arr)
=> true
請不要折騰代碼。解釋爲什麼代碼是有用的,爲什麼你的答案效果最好。不要給某人一條魚,教他們如何釣魚。 –
my_arr = ["PR", "PM", "EM", "SM", "ST"]
r = Regexp.union(my_arr)
# => /PR|PM|EM|SM|ST/
["5012PR152", "5512ST011", "5012ME031"].map { |s| !!(s =~ r) }
#=> [true, true, false]
!
一個truthy值(任何其它nil
和false
)轉換爲false
和falsy值(nil
或false
)至true
。因此,!!
將真實值轉換爲true
並將虛假值轉換爲false
。您可以選擇將塊編寫爲
{ |s| s =~ r ? true : false }
歡迎使用堆棧溢出。閱讀「[問]」和「[mcve]」。我們需要看到你解決問題的嘗試。這並沒有表現出太多的努力,這很重要。 http://meta.stackoverflow.com/q/261592/128421 –