ruby方法返回具有奇偶索引ruby 2.6.0的错误元素 def奇偶数组 编号=5169294814153321 数组\奇数\索引=[] 数组_偶数_索引=[] 数组_of_chars=number.to_.chars.map(&:to_i) 每个{x}个字符的数组。索引(x)%2==0?数组\u偶数\u索引

ruby方法返回具有奇偶索引ruby 2.6.0的错误元素 def奇偶数组 编号=5169294814153321 数组\奇数\索引=[] 数组_偶数_索引=[] 数组_of_chars=number.to_.chars.map(&:to_i) 每个{x}个字符的数组。索引(x)%2==0?数组\u偶数\u索引,ruby,Ruby,实际代码的问题是index返回它在接收器中找到的第一个元素的索引。由于1是number中的4倍,它将从左到右返回number中的第一个1的索引,对于所有其他重复的数字也是如此 一个简单的解决方案;使用each_with_index,它允许您迭代接收器中的每个元素,并生成该元素的当前索引,因此您可以检查索引是否为偶数,决定将元素推送到何处: def even_odd_array number = 5169294814153321 array_odd_index = [] array_e

实际代码的问题是
index
返回它在接收器中找到的第一个元素的索引。由于1是
number
中的4倍,它将从左到右返回
number
中的第一个1的索引,对于所有其他重复的数字也是如此

一个简单的解决方案;使用
each_with_index
,它允许您迭代接收器中的每个元素,并生成该元素的当前索引,因此您可以检查索引是否为偶数,决定将元素推送到何处:

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\u of chars
中5的索引是偶数吗?是的,在
array\u of chars
中1的索引是偶数吗?不是,在
array\u of chars
中6的索引是偶数吗?是的…,到目前为止,代码看起来正在做您希望它做的事情。您可以更好地解释您正在尝试做什么,以及您的预期输出是什么?我希望有2个数组。F第一个数组中的所有数字都应该是奇数索引,另一个是偶数索引。这不是你现在拥有的吗?或者你把
索引与其他东西混在一起了吗?“它怎么了?”–这不是工作原理。您需要告诉我们哪里出了问题,您正在尝试做什么,您尝试解决了什么问题,您在哪里遇到了问题,以及您尝试了什么来解决问题。我希望此方法返回2个数组。第一个数组应该像``数组偶数索引`[5,6,2,4,1,1,3,2]``和第二个
数组奇数索引#[1,9,9,8,4,5,3,1]
。但它返回的是描述中的数组
array_of_chars.each_with_index do |x, index|
  if index.even?
    array_even_index << x
  else
    array_odd_index << x
  end
end
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]