यहां कुछ ऐसे तरीके दिए गए स्ट्रिंग एक स्ट्रिंग में दिखाए जाने की संख्या की गणना करें के एक जोड़े हैं (पहले मेरी प्राथमिकता किया जा रहा है):
समय की संख्या aa
स्ट्रिंग में प्रकट होता है गिनती करने के लिए। नोट इसलिए पाँच में बार (ओपी द्वारा के रूप में पुष्टि) सबस्ट्रिंग 'aa'
स्ट्रिंग 'aaa'
में दो बार होता है, और:
string="aaabbccaaaaddbb"
# 1
एक regex कि एक सकारात्मक अग्रदर्शी शामिल साथ उपयोग String#scan कि
def count_em(string, substring)
string.scan(/(?=#{substring})/).count
end
count_em(string,"aa")
#=> 5
नोट::
-स्ट्रिंग के लिए लग रहा है
एक सकारात्मक lookbehind एक ही परिणाम का उत्पादन:
"aaabbccaaaaddbb".scan(/(?<=aa)/)
#=> ["", "", "", "", ""]
# 2
एक सरणी में कनवर्ट, लागू Enumerable#each_cons, तो में शामिल होने और गिनती:
def count_em(string, substring)
string.each_char.each_cons(substring.size).map(&:join).count(substring)
end
count_em(string,"aa")
#=> 5
हम:
enum0 = "aaabbccaaaaddbb".each_char
#=> #<Enumerator: "aaabbccaaaaddbb":each_char>
हम तत्वों है कि इस प्रगणक द्वारा उत्पन्न होगा देख सकते हैं एक सरणी के लिए इसे परिवर्तित करके:
enum0.to_a
#=> ["a", "a", "a", "b", "b", "c", "c", "a", "a", "a",
# "a", "d", "d", "b", "b"]
enum1 = enum0.each_cons("aa".size)
#=> #<Enumerator: #<Enumerator: "aaabbccaaaaddbb":each_char>:each_cons(2)>
Convert enum1
एक सरणी को देखने के लिए कौन-से मान प्रगणक map
तक पहुंचाया जाएगा:
enum1.to_a
#=> [["a", "a"], ["a", "a"], ["a", "b"], ["b", "b"], ["b", "c"],
# ["c", "c"], ["c", "a"], ["a", "a"], ["a", "a"], ["a", "a"],
# ["a", "d"], ["d", "d"], ["d", "b"], ["b", "b"]]
c = enum1.map(&:join)
#=> ["aa", "aa", "ab", "bb", "bc", "cc", "ca",
# "aa", "aa", "aa", "ad", "dd", "db", "bb"]
c.count("aa")
#=> 5
कृपया स्पष्टीकरण (एक संपादन के साथ): '' aa'' 'aa''' स्ट्रिंग में एक या दो बार दिखाई देता है। –
यह उस मामले में शायद दो बार होना चाहिए।पद 0 और 1 और स्थिति 1 और 2 – Johnson
निश्चित रूप से, आप एक उत्कृष्ट पोस्टर हैं। मैंने आपको कैरी स्वोवलैंड को पुरस्कृत किया। – Johnson