ruby – 检查一个数组是否已经排序?

我知道如何放置一个数组,但在这种情况下,我只是想看看它是否是有序的。一系列的字符串将是最简单的,我想象的,并且在这方面的答案是赞赏,但答案包括检查基于某个任意参数的顺序的能力是最佳的。

这是一个示例数据集。的名称:

[["a", 3],["b",53],["c",2]]

其中元素本身是包含多个元素的数组,其中第一个是一个字符串。我想看看这些元素是否按字母顺序排列。

这是一个通用的抽象,我们来打开Enumerable:

module Enumerable
  def sorted?
    each_cons(2).all? { |a, b| (a <=> b) <= 0 }
  end
end

[["a", 3], ["b", 53],["c", 2]].sorted? #=> true

请注意,我们必须写(a< => b)< = 0而不是< = b,因为有类支持< =>但不是比较器操作符(即Array),因为它们不包括模块Comparable

您还表示,您希望有能力“根据某些任意参数检查订单”。有同样的想法:

module Enumerable  
  def sorted_by?
    each_cons(2).all? { |a, b| ((yield a) <=> (yield b)) <= 0 }    
  end
end

[["a", 3], ["b", 1], ["c", 2]].sorted_by? { |k, v| v } #=> false

使用lazy枚举(Ruby => 2.1)它更好,因为我们可以重复使用我们以前的抽象枚举#排序:

module Enumerable  
  def sorted_by?(&block)
    lazy.map(&block).sorted?
  end
end
http://stackoverflow.com/questions/8015775/check-to-see-if-an-array-is-already-sorted

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ruby – 检查一个数组是否已经排序?