Ruby 检查数组是否正在增加
我只是想知道是否有办法检查阵列是否在增加 这是我的解决方案,但我正在寻找更美好的方式:Ruby 检查数组是否正在增加,ruby,Ruby,我只是想知道是否有办法检查阵列是否在增加 这是我的解决方案,但我正在寻找更美好的方式: n = - 1 @arr.flatten.each { |e| return false if e < n n = e } n=-1 @每个{e{124; e} 如果earr=[1,4,5,6] >每一个都有两个,好吗?|a,b |(a b)正确 您可以将其添加到数组类中 class Array def is_sorted? each_cons(2).all? { |
n = - 1
@arr.flatten.each { |e|
return false if e < n
n = e
}
n=-1
@每个{e{124; e}
如果e
试试这个
if @arr.sort.uniq == @arr
# array is increasing
else
# array not increasing
end
这将对数组进行排序并删除重复值,然后将其与原始数组进行比较
如果原始数组始终在增加,则它应与已排序、消除重复的数组相匹配
编辑:
虽然此解决方案提供了所需的结果,但这不是最佳解决方案(请参阅下面的注释)。我建议改用toch的解决方案。你可以做以下几点:
> arr = [1, 4, 5, 6]
> arr.each_cons(2).all? { |a, b| (a <=> b) <= 0 }
=> true
>arr=[1,4,5,6]
>每一个都有两个,好吗?|a,b |(a b)正确
您可以将其添加到数组类中
class Array
def is_sorted?
each_cons(2).all? { |a, b| (a <=> b) <= 0 }
end
end
类数组
def是否已排序?
当你说“检查数组是否在增加”时,你的意思是要检查数组是否按升序排序吗?@tokland在这种情况下,“重复”似乎相当复杂。为什么不每个选项(2)。全部?{| a,b | a@tokland您的版本也可以运行,但是当您要对对象进行排序时,可以使用
操作符。例如,依赖它。是的,有些对象实现了,但不包括可比较的对象(即数组)谁知道为什么。所以在一般抽象中我会使用它,但不是在第一个抽象中,因为OPs是对数字进行排序的。只是一个细节。不管怎样+1,尽管这个确切的问题已经得到了回答:-)@tokland好的,谢谢你提供的信息。我下次应该检查副本。这是O(n log n)-严格而使用每一项都是
+任何?
都是O(n)-懒惰的。真的没有理由这样做。