首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Ruby在数组或字符串中找到每三个数字的乘积?

如何使用Ruby在数组或字符串中找到每三个数字的乘积?
EN

Stack Overflow用户
提问于 2013-10-10 22:33:39
回答 2查看 125关注 0票数 1

这只是我在脑海中想出的一个随机场景,如果我有这个数组:

代码语言:javascript
运行
复制
[3,2,5,6,7,8,9,1,2]

和这个字符串:

代码语言:javascript
运行
复制
'325678912'

我应该用Ruby写什么代码,它会产生一个of:

代码语言:javascript
运行
复制
3*2*5 = 30, 6*7*8 = 336, and 9*1*2 = 18 

并将其放入一个数组中:

代码语言:javascript
运行
复制
[30,336,18]

抱歉,我忘了把返回错误答案的代码放进去:

代码语言:javascript
运行
复制
b = [3,2,5,6,7,8,9,1,2]


first = 0
third = first + 2
array = []
while first<b.length
  prod=1
  b[first..third].each do |x|
    prod*=x.to_i
    array<<prod
  end
  first+=2
  third = first + 2
end

print array

和我的另一段字符串代码:

代码语言:javascript
运行
复制
a = '325678912'

number = a.split('')
first = 0
third = first + 2
array = []
while first<number.length
  prod=1
  number[first..third].each do |x|
    prod*=x.to_i
    array<<prod
  end
  first+=2
  third = first + 2
end

print array

对于这两段代码,我得到的答案是: 3,6,30,5,30,210,7,56,504,9,9,18,2,我想要的是: 30,336,18

有人能告诉我我的代码出了什么问题吗?

提前谢谢你!

EN

回答 2

Stack Overflow用户

发布于 2013-10-10 22:35:07

使用Enumerable#each_slice

代码语言:javascript
运行
复制
[3,2,5,6,7,8,9,1,2].each_slice(3).map { |a,b,c| a*b*c }
# => [30, 336, 18]
[3,2,5,6,7,8,9,1,2].each_slice(3).map { |x| x.reduce(:*) }
# => [30, 336, 18]

使用String#chars将字符串转换为单字符字符串数组。然后使用上面的代码得到结果:

代码语言:javascript
运行
复制
'325678912'.chars
# => ["3", "2", "5", "6", "7", "8", "9", "1", "2"]
'325678912'.chars.map(&:to_i)
# => [3, 2, 5, 6, 7, 8, 9, 1, 2]
'325678912'.chars.map(&:to_i).each_slice(3).map { |a,b,c| a*b*c }
# => [30, 336, 18]
票数 5
EN

Stack Overflow用户

发布于 2013-10-11 00:16:37

你的代码,带注释。

代码语言:javascript
运行
复制
b = [3,2,5,6,7,8,9,1,2]
first = 0
third = first + 2
array = []
while first<b.length
  prod=1
  b[first..third].each do |x|
    prod*=x.to_i  # to_i unnecessary, already integer
    array<<prod   # Ah no. Too early. move this outside the block
  end
  #Here would be fine.
  #And don't forget to reset prod to 1.
  first+=2  #3 ! not 2.
  third = first + 2
end

print array
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19298710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档