Arrays 如何检查数组中的每个元素是否大于其前面的元素?

Arrays 如何检查数组中的每个元素是否大于其前面的元素?,arrays,ruby,integer,comparison,Arrays,Ruby,Integer,Comparison,我正在使用Ruby 2.4。我有一个字符串数组,它们本身就是数字。大概是 ["1", "2", "3", "5"] 如何检查数组中每个元素(第一个除外)的整数版本是否大于它之前的整数版本?例如,在上面执行的函数将返回true,但类似于 ["1", "5", "4", "6"] 将返回false(因为“4”不大于“5”。您可以使用查看arr是否已按数值排序: arr = ["1", "2", "3", "5"] arr.uniq.sort_by(&:to_i) == arr #=>

我正在使用Ruby 2.4。我有一个字符串数组,它们本身就是数字。大概是

["1", "2", "3", "5"]
如何检查数组中每个元素(第一个除外)的整数版本是否大于它之前的整数版本?例如,在上面执行的函数将返回true,但类似于

["1", "5", "4", "6"]
将返回false(因为“4”不大于“5”。

您可以使用查看
arr
是否已按数值排序:

arr = ["1", "2", "3", "5"]
arr.uniq.sort_by(&:to_i) == arr
#=> true 

如果元素不唯一,则数组自动失败。因为这意味着两个元素的值相同,即一个不大于另一个。

另一种表述谓词的方法是:“对于所有的cons连续数对,第二个数比第一个数大是真的吗?”这几乎可以直接用代码表示:

ary.map(&:to_i).each_cons(2).all? {|first, second| second > first }

顺便说一句:这个属性被称为“严格单调性”。

遗憾的是,我不能保证元素是唯一的,只能保证它们都是数字(伪装成字符串)。@Natalia如果它们是从最低到最高的顺序,那么它们必须满足您对“大于前面的一个”的定义“,然后它被排序,因此排序应该没有效果。不过,你可以用O(n)来做。我更喜欢这样,因为它更清楚代码在做什么。它也应该快得多。谢谢,我忘了
每个图标都代表什么。@EricDuminil:是的,
每个图标都不太明显。