Ruby 如何计算字符串中重复字符的数量

Ruby 如何计算字符串中重复字符的数量,ruby,Ruby,我有一根绳子 s = "chineedne" 我正在尝试创建一个函数,可以计算字符串或任何字符串中重复字符的数量 尝试 您可以简单地计算您的字符: chars_frequency = str.each_char .with_object(Hash.new(0)) {|c, m| m[c]+=1} => {"c"=>1, "h"=>1, "i"=>1, "n"=>2, "e"=>3, "d"=>1} 然后数一数

我有一根绳子

s = "chineedne"
我正在尝试创建一个函数,可以计算字符串或任何字符串中重复字符的数量

尝试


您可以简单地计算您的字符:

chars_frequency = str.each_char
                     .with_object(Hash.new(0)) {|c, m| m[c]+=1}
=> {"c"=>1, "h"=>1, "i"=>1, "n"=>2, "e"=>3, "d"=>1}
然后数一数:

chars_frequency.count { |k, v| v > 1 }
=> 2
或者(如果要计算总金额):


您可以简单地计算您的字符:

chars_frequency = str.each_char
                     .with_object(Hash.new(0)) {|c, m| m[c]+=1}
=> {"c"=>1, "h"=>1, "i"=>1, "n"=>2, "e"=>3, "d"=>1}
然后数一数:

chars_frequency.count { |k, v| v > 1 }
=> 2
或者(如果要计算总金额):

可能的解决办法:

string = "chineedne"
string.chars.uniq.count { |char| string.count(char) > 1 }
#=> 2
或者不使用uniq方法来计算重复字符的总数:

string = "chineedne"
string.chars.count { |char| string.count(char) > 1 }
#=> 5

为了避免N**2的复杂性,您还可以使用
groupby
方法创建包含
string
中所有此字符的
character
->
array
散列,而不仅仅是使用此散列来获取所需的任何数据:

duplicates = string.chars.group_by { |char| char }.select { |key, value| value.size > 1 } 
# or, for Ruby version >= 2.2.1 - string.chars.group_by(&:itself).select { |key, value| value.size > 1 }
比:

> duplicates.keys.size # .keys => ['n', 'e']
#=> 2

可能的解决办法:

string = "chineedne"
string.chars.uniq.count { |char| string.count(char) > 1 }
#=> 2
或者不使用uniq方法来计算重复字符的总数:

string = "chineedne"
string.chars.count { |char| string.count(char) > 1 }
#=> 5

为了避免N**2的复杂性,您还可以使用
groupby
方法创建包含
string
中所有此字符的
character
->
array
散列,而不仅仅是使用此散列来获取所需的任何数据:

duplicates = string.chars.group_by { |char| char }.select { |key, value| value.size > 1 } 
# or, for Ruby version >= 2.2.1 - string.chars.group_by(&:itself).select { |key, value| value.size > 1 }
比:

> duplicates.keys.size # .keys => ['n', 'e']
#=> 2


我对ruby了解不多,但我认为这样的东西应该行得通

yourstring = "chineedne"
count = 0
"abcdefghijklmnopqrstuvwxyz".split("").each do |c|
  if (yourstring.scan(c).count > 1
    count = count+1
  end
end
count变量表示重复字符的数量

我对ruby知道的不多,但我认为这样的东西应该行得通

yourstring = "chineedne"
count = 0
"abcdefghijklmnopqrstuvwxyz".split("").each do |c|
  if (yourstring.scan(c).count > 1
    count = count+1
  end
end
count变量表示重复字符的数量

#迭代每个字符创建一个数组 #downcase,以防我们处理区分大小写的问题

arr = string.downcase.chars
#取出uniq字符并计算出有多少次 #它们多次出现在数组中

arr.uniq.count {|n| arr.count(n) > 1}
#迭代每个字符创建一个数组 #downcase,以防我们处理区分大小写的问题

arr = string.downcase.chars
#取出uniq字符并计算出有多少次 #它们多次出现在数组中

arr.uniq.count {|n| arr.count(n) > 1}

N**2复杂性要详细说明@llya的注释,
count
必须为每个唯一字符遍历字符串一次。这是非常低效的,因为您可以在一次传递中生成所有这些计数,就像llya使用计数散列所做的那样。你也可以使用
.group\u by(&:本身)
)@Ilya首先,我写了这篇文章。其次,这种方法在Ruby 2.2.1+版本中可用(可能在一些早期版本中,但在1.9.3中不起作用)。但是谢谢!N**2复杂性要详细说明@llya的注释,
count
必须为每个唯一字符遍历字符串一次。这是非常低效的,因为您可以在一次传递中生成所有这些计数,就像llya使用计数散列所做的那样。你也可以使用
.group\u by(&:本身)
)@Ilya首先,我写了这篇文章。其次,这种方法在Ruby 2.2.1+版本中可用(可能在一些早期版本中,但在1.9.3中不起作用)。但是谢谢<代码>每个带有对象的\u→
带对象
很遗憾,stdlib
中没有
按对象计数
with_object
STDlib中没有
count_by
,真遗憾,你能定义“重复字符的数量”吗?你的预期结果是什么?为什么?你已经看到@Stefan的问题,但你选择不回答。为什么?你的问题不清楚。是否要显示至少两次的字符数?至少出现两次的字符的总外观数?你想让每个这样的字符都有一个数字,还是让一个数字代替所有这样的字符?对不起,我指的是重复字符的计数。。那么基本上,字符串中有多少个字符是重复的,您能定义“重复字符的数量”吗?你的预期结果是什么?为什么?你已经看到@Stefan的问题,但你选择不回答。为什么?你的问题不清楚。是否要显示至少两次的字符数?至少出现两次的字符的总外观数?你想让每个这样的字符都有一个数字,还是让一个数字代替所有这样的字符?对不起,我指的是重复字符的计数。。那么基本上字符串中有多少个字符是重复的