Ruby 每个都要与之前的索引进行比较

Ruby 每个都要与之前的索引进行比较,ruby,Ruby,我有时很难理解在Ruby中使用方法和普通循环的好处。方法对我来说似乎不那么灵活。例如,每个vs.一个while循环 例如,与以前的指数相比 i = 0 while i < array.length if array[i] > array[i+1] return true end i += 1 end i=0 而i数组[i+1] 返回真值 结束 i+=1 结束 我该如何使用一个。每个?使用array.each时,似乎我只能访问该索引处的数组[

我有时很难理解在Ruby中使用方法和普通循环的好处。方法对我来说似乎不那么灵活。例如,每个vs.一个while循环

例如,与以前的指数相比

i = 0
while i < array.length
    if array[i] > array[i+1]
        return true
    end
    i += 1
end
i=0
而i数组[i+1]
返回真值
结束
i+=1
结束
我该如何使用一个。每个?使用array.each时,似乎我只能访问该索引处的数组[I]

是诸如.select.all?之类的方法。地图只是捷径?对于我正在处理的问题,我可以使用while循环(尽管使用更多的代码)来解决它们,但是解决方案使用多种方法。它似乎更容易解决与正常循环,然后找出具体的方法来使用每一次。。。这只是我需要学习和习惯的东西吗

谢谢你的帮助

我该如何使用一个。每个

您可以使用带有索引的
每个\u

array.each_with_index do |value, i|
    if value > array[i+1]
        return true
    end
end
但有一种“快捷方式”可以帮你完成配对。看见这里有一个例子,这是从你的问题稍微调整,所以你可以看到它的工作

irb(main):023:0> array = [5,4,3,2,1]
# => [5, 4, 3, 2, 1]
irb(main):024:0> array.each_cons(2) { |pair| puts "true" if pair[0] > pair[1] }
true
true
true
true
# => nil
它似乎更容易解决与正常循环,然后找出具体的方法来使用每一次。。。这只是我需要学习和习惯的东西吗


是的,这是你必须习惯的。这是人们经常提到的Ruby“魔力”的一部分。Ruby将用很少的代码为您做大量的工作,但学习曲线要陡峭一些。一旦你开始在气缸上点火,你就会燃烧得很快。

根据你的代码片段(我认为它没有任何实际用途),你似乎在试图弄清楚给定数组是否有任何元素大于它后面的元素

使用惯用Ruby,以下是许多可能的方法之一:

array.each_cons(2).any? { |f,s| f > s}

PS:如果你在StackOverflow的Ruby部分潜伏足够长的时间,你就会习惯用Ruby的方式做事。

这个循环的目的是什么?代码试图实现什么?除非您指定了用途,否则可能无法告诉您不依赖从不同线程修改的loopsIs
array
的等效代码?如果不是,你的循环就是一个无止境的循环。不清楚你想用它做什么。OP已经改变了问题。现在,你的代码和OP的代码一样,我喜欢你的代码。把Ruby称为真正的函数式编程,听起来不是很混乱吗?人们说“程序员喜欢Ruby”是有原因的——它非常有表现力和灵活性。无论“Ruby Way”是不是正确的表达式,但是Ruby有一定的天赋,这使得它很有趣Ruby API文档将告诉您有哪些不同的方法,但是它们的实际应用将伴随着持续的使用而来。我的大部分Ruby都是通过向别人的答案学习来尝试回答的