Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 检查数组是否正在增加_Ruby - Fatal编程技术网

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)-懒惰的。真的没有理由这样做。