Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何查找符号在字符串中重复的次数_Ruby_String - Fatal编程技术网

Ruby 如何查找符号在字符串中重复的次数

Ruby 如何查找符号在字符串中重复的次数,ruby,string,Ruby,String,如何找到符号在字符串中重复的次数 def duplicate_count(text) t = text.downcase t... end Test.assert_equals(duplicate_count("abc"), 0) Test.assert_equals(duplicate_count("abcdeaa"), 1) Test.assert_equals(duplicate_count("abcdeaB"), 2) 一方面,它不漂亮,但有效: def duplicates

如何找到符号在字符串中重复的次数

def duplicate_count(text)
  t = text.downcase
  t...
end

Test.assert_equals(duplicate_count("abc"), 0)
Test.assert_equals(duplicate_count("abcdeaa"), 1)
Test.assert_equals(duplicate_count("abcdeaB"), 2)

一方面,它不漂亮,但有效:

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
稍微好一点的实现:

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

基于@sagarpandya2答案

def duplicate_count(text)
  text.downcase.chars.group_by(&:to_s).count { |v| v[1].count > 1 }
end
散列。新的(0)
通常称为计数散列。请参阅,特别是参考默认值(此处为
0
)。

def dupe\u count(文本、数据)
text.scan(数据).count
结束

dupe_count(“abcc”,“c”)#@KirillZhuravlov更新了一个更好的版本:)考虑
text.downcase.each_char.group_by(&:本身)。count{124; uv,v.count>1}
。返回枚举数,避免使用
chars
返回的临时数组。比
对_更具表现力,但仅从v2.2开始出现。我个人更喜欢
groupby{s}
而不是
groupby(&:to_s)
,我觉得这有点太可爱了。
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
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