ruby - ruby 方法返回带有奇数/偶数索引的错误元素 ruby 2.6.0
问题描述
def even_odd_array
number = 5169294814153321
array_odd_index = []
array_even_index = []
array_of_chars = number.to_s.chars.map(&:to_i)
array_of_chars.each { |x| array_of_chars.index(x) % 2 == 0 ? array_even_index << x : array_odd_index << x } <----- this returns wrong arrays
#array_odd_index, array_even_index = array_of_chars.each_slice(2).to_a.transpose
p array_even_index
p array_odd_index
end
array_even_index [5, 6, 2, 4, 4, 5, 3, 3, 2]
array_odd_index [1, 9, 9, 8, 1, 1, 1]
它有什么问题,还有其他方法可以做到吗?
解决方案
您的实际代码的问题在于它index
返回它在接收器中找到的第一个元素的索引。由于 1 是 4 次,number
它将number
从左到右返回第一个 1 的索引,对于所有其他重复数字相同。
一个简单的解决方案;使用each_with_index
它允许您遍历接收器中的每个元素并生成该元素的当前索引,因此您可以检查索引是否为偶数,决定将元素推送到何处:
array_of_chars.each_with_index do |x, index|
if index.even?
array_even_index << x
else
array_odd_index << x
end
end
或者您可以为此使用partition
plus with_index
:
array_even_index, array_odd_index = 5169294814153321.digits.reverse.partition.with_index { |_, index| index.even? }
p array_even_index # [5, 6, 2, 4, 1, 1, 3, 2]
p array_odd_index # [1, 9, 9, 8, 4, 5, 3, 1]
推荐阅读
- ansible - 拥有多个 Ansible 清单(所有主机超过一个清单)是否有充分的理由?
- javascript - 添加到 JSON 而不覆盖(使用 Ajax)
- ionic-framework - 路线更改时离子模式自动关闭
- android - QR 扫描仪应用程序有一些奇怪的问题,
- subquery - slick 中的聚合子查询
- spring-boot - 在 BeanFactoryPostProcessor 中,如何访问 application.properties 中的变量
- opencv - 如何从单应性RANSAC中消除无效的四边形匹配?
- checkbox - 复选框角材质修改样式,不使用(已弃用)/deep/、>>> 和 ::ng-deep
- java - 如何同时使用相机预览和手电筒?
- java - 带有 Java RESTl 服务的 Nginx