计算字符在Ruby中的字符串数组中出现的次数

时间:2017-12-25 11:04:32

标签: arrays ruby loops count integer

您好我正在编写一个方法,需要检查数组中给定字符的每个元素,并返回字符在数组元素中完全出现的次数。

为了创建squarenumbers数组,我有以下代码:

 squarenumbers = []
 for k in 1..n
   squarenumbers << k**2
 end
 squarenumbers.map { |a| a.to_s }
 d.to_s

到目前为止,我已经写了数字:

for k in 0..n-1
   count =+1 if squarenumbers[k].include?"d" 
end 

我创建了一个大小为n的数组,其中包含来自1 to n的方形数字,我现在无法计算每个元素中d的数量出现次数。

我将d转换为方法中的字符串,无法理解为什么计数不起作用。我道歉我是一个初学者,但我认为我写的内容会检查数组中每个元素的字符d,并在每次字符串包含它时将1加到计数器中。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我的回答假设问题如下:&#34;给定一个自然数(非负整数)数组和一个数字d(整数0-9),计算总数对于数组的每个元素,数字的位数等于d,并对数组中所有元素的总数进行求和&#34;。

请注意,此说明不提及完美正方形。这是因为构造自然数组的方式是无关紧要的。

让我们首先构建一个方法,计算给定数字d出现在自然数n中的次数。

def digit_in_number_count(n, digit)
  n.digits.count(digit)
end

请参阅Integer#digitsArray#count

现在只需要对数组中所有元素的计数进行求和。设a表示一系列自然数。

def digit_in_array_count(a, digit)
  a.sum { |n| digit_in_number_count(n, digit) }
end

Array#sum

以下是一个例子。

a = [123425, 622252, 136407]
digit = 2

digit_in_number_count(123425, digit)
  #=> 2
digit_in_array_count(a, digit)
  #=> 6

Integer#digitsArray#sum都在Ruby v2.4中首次亮相。要支持早期版本的Ruby,您可以按如下方式修改方法。

def digit_in_number_count(n, digit)
  n.to_s.count(digit.to_s)
end

def digit_in_array_count(a, digit)
  a.reduce(0) { |t,n| t + digit_in_number_count(n, digit) }
end

请参阅Enumerable#reducea.k.a. inject)和String#count

答案 1 :(得分:0)

  

我正在编写一个需要检查数组中每个元素的方法   给定的字符并返回字符出现的次数   完全在数组的元素中。

假设您有一个字符串数组,那么您可以使用val clusterName: String = "getting-started-with-elastic4s" val homePath: Path = Files.createTempDirectory(clusterName) val localNode = LocalNode(clusterName,homePath.toAbsolutePath.toString) localNode.start() val client = HttpClient(ElasticsearchClientUri("localhost",9200)) client.execute{ createIndex("trial") }.await sum

count

答案 2 :(得分:0)

对于一组数字,你可以这样做:

squarenumbers.sum {|e| e.to_a.count(d)}

如果d是数字,则您需要将其更改为d.to_s