Arrays Ruby:如何在数组中逐个比较元素?

Arrays Ruby:如何在数组中逐个比较元素?,arrays,ruby,Arrays,Ruby,这里是关于stackoverflow的第一个问题: 考虑由任意整数组成的随机数组 a = [5, 10, 2, 3, 56] 我想写一个代码,同样地比较每个元素:索引I el_I的元素和索引I+1 el_I+1的元素,并继续比较索引I+1 el_I+1和索引I+2 el_I+2的元素,直到a.length。然后我想根据比较的结果对元素求和。下面是一个尝试描绘失败的示例: def conditional_sum(array) sum = 0 array.each_with_index d

这里是关于stackoverflow的第一个问题:

考虑由任意整数组成的随机数组

a = [5, 10, 2, 3, 56]
我想写一个代码,同样地比较每个元素:索引I el_I的元素和索引I+1 el_I+1的元素,并继续比较索引I+1 el_I+1和索引I+2 el_I+2的元素,直到a.length。然后我想根据比较的结果对元素求和。下面是一个尝试描绘失败的示例:

def conditional_sum(array)
  sum = 0
  array.each_with_index do |element, i|
    if array[i] >= array[i + 1]
      sum += element
    else
      sum -= element
    end
  end
  sum
end
另一种方法是从上一个数组中生成2个数组,并删除最后一个元素。我将为您提供代码,以获得具有相同索引的比较元素:

a = [5, 10, 2, 3, 56]
a_bis = [5, 10, 2, 3]
b = [10, 2, 3, 56]  

sum = 0
for i in [0..a_bis.length]
  if a_bis[i] >= b[i] 
    sum += a_bis[i] + b[i]
  else
    sum -= a_bis[i] + b[i]
  end
end
p sum

也不起作用。。。非常感谢你的帮助

如果我理解你的问题:

a = [5, 10, 2, 3, 56]

a.each_cons(2).sum do |first, second|
  first > second ? first - second : first + second
end
#=>87
将它们分组为成对的连续元素:

a.each_cons(2) do |pair|
  p pair
end
#=>[5, 10]
#  [10, 2]
#  [2, 3]
#  [3, 56]

然后,您可以对块内的每一对执行所需的计算。

您的第一个示例几乎可以正常工作。尝试此操作会引发错误:

`>=': comparison of Integer with nil failed (ArgumentError)
这是因为在索引的最后一次迭代中,您将最后一个值56与nil进行比较。Ie 56>=nil对ruby没有意义,因此出现了错误。要修复它,可以不使用最后一个元素进行迭代。正如在ruby中一样,他们有多种方法来实现这一点。这是我的:

def条件数组 总和=0 数组[0…-1]将在没有最后一个元素的情况下迭代 数组[0…-1]。每个带有_索引do |元素的_,i| 如果数组[i]>=数组[i+1] 总和+=元素 其他的 总和-=元素 终止 终止 总和 终止 另一个解决方案是以下更实用的样式。使用来选择每一对

def条件数组 数组。每个_消耗2 .sum{i,j{i>=j?i:-i} 终止
你能发布该方法的预期输出吗?仅仅是元素加在一起integerdoesn也不起作用,这不是一个足够精确的错误描述,我们无法帮助你。什么不起作用?它怎么不起作用?你的代码有什么问题?你收到错误信息了吗?错误消息是什么?你得到的结果不是你期望的结果吗?你期望得到什么样的结果?为什么?你会得到什么样的结果?两者有什么不同?你观察到的行为是否不是期望的行为?所需的行为是什么?为什么?观察到的行为是什么?它们以什么方式不同?此外,请提供您希望发生的行为的精确说明,包括任何和所有规则、这些规则的例外情况、拐角情况、特殊情况、边界情况和边缘情况。请提供示例输入和输出,说明在正常情况下,以及在所有例外情况、拐角情况、特殊情况、边界情况和边缘情况下,您预期会发生什么。单个示例不是规范,单个示例也不足以测试所有边界情况。根据,问题中示例的结果应为-62,但您标记为正确,结果为0。你不能两全其美。0是正确的或-62是正确的,它们不可能都是正确的。您可以使用sum而不是map。很好的开始,但没有完全回答:如果我使用数组a,我希望代码执行以下操作:5-10+2-3-56=-62@FrançoisCapel你说你想要-62,但被接受的答案是0。你为什么在最后减去56?我的错误我有一点搞糊涂了。我在上面插入了Raphael Pr的代码,并添加了缺少的最后一个元素,因为在每个_cons2 bloc中没有考虑到它,现在它可以工作了。现在还不清楚期望的结果是什么,以及最后一个元素应该发生什么等等!小心,您错过了这里的最后一个值:需要通过再次添加来进行小的修复,否则将返回错误的结果。我必须将数组[-1]添加到返回值最后一个值的规则是什么?您始终可以向sum数组[-1]中添加值,或向输入数组中添加0值,因此需要对最后一个元素进行小的修正。再次非常感谢: