2016-11-20 4 views

答えて

1

一つの方法、それはかなりありませんが、動作します:

def duplicates string 
    string.downcase.split('') 
       .group_by { |i| i } 
       .to_a 
       .select { |i| i[1].size > 1 } 
       .size 
end 

duplicates "abc"  #=> 0 
duplicates "abcdeaa" #=> 1 
duplicates "abcdeaB" #=> 2 

A若干良い実装:

def duplicates string 
    string.downcase.split('') 
       .group_by { |i| i } 
       .values 
       .select { |i| i.size > 1 } 
       .size 
end 
+0

テストは合格です、ありがとうございます。 –

+0

@KirillZhuravlovはより良いバージョンで答えを更新しました:) –

0

@に基づいて

def duplicate_count(text) 
    text.downcase.chars.group_by(&:to_s).count { |v| v[1].count > 1 } 
end 
+1

'text.downcase.each_char.group_by(&:自体).count {| _ v | v.count> 1} 'となります。 [String.each_char](http://ruby-doc.org/core-2.3.0/String.html#method-i-each_char)は列挙子を返し、 'chars'によって返された一時配列が不要になります。 [Object#itself](https://ruby-doc.org/core-2.2.0/Object.html#method-i-itself)は 'to_s'より表現力がありますが、v2.2以降は私たちと一緒になっています。私は個人的に 'group_by {| s | s} 'を' group_by(&:to_s) 'に設定しました。 –

1
def count_dups(str) 
    str.each_char.with_object(Hash.new(0)) {|c,h| h[c.downcase] += 1}.count {|_,v| v >= 2} 
end 

count_dups "abc"  #=> 0 
count_dups "abcdeaa" #=> 1 
count_dups "abcdeaB" #=> 2 
に答えるsagarpandya82

Hash.new(0)は、と呼ばれることが多く、と呼ばれます。 Hash::newを参照してください。特に、デフォルト値(ここでは0)を参照してください。あなたは、引数として与えられたテキストは、テキストの中にカウントしようとしているものと一緒に、あなたが与えられたdataのテキストをスキャンしてい

0
def dupe_count(text, data) 
    text.scan(data).count 
end 
dupe_count("abcc", "c") #<= 2 
dupe_count("test", "t") #<= 2 
dupe_count("lost", "w") #<= 0 

は、基本的にはcount

で番号を検索して返すようにしたいです
関連する問題