我知道如何按顺序放置一个数组,但在这种情况下,我只是想知道它是否有序.我想,一串字符串将是最简单的,并且在这方面的答案是值得赞赏的,但是包括基于某些任意参数检查顺序的能力的答案是最佳的.
这是一个示例数据集.名称:
[["a", 3],["b",53],["c",2]]
Run Code Online (Sandbox Code Playgroud)
元素本身是包含多个元素的数组,其中第一个是字符串.我想看看这些元素是否按字母顺序排列.
tok*_*and 35
它看起来像一个通用的抽象,让我们打开Enumerable:
module Enumerable
def sorted?
each_cons(2).all? { |a, b| (a <=> b) <= 0 }
end
end
[["a", 3], ["b", 53],["c", 2]].sorted? #=> true
Run Code Online (Sandbox Code Playgroud)
请注意,我们必须编写(a <=> b) <= 0而不是a <= 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
Run Code Online (Sandbox Code Playgroud)
使用惰性枚举(Ruby> = 2.1),我们可以重用Enumerable#sorted?:
module Enumerable
def sorted_by?(&block)
lazy.map(&block).sorted?
end
end
Run Code Online (Sandbox Code Playgroud)
你可以两个比较它们:
[["a", 3],["b",53],["c",2]].each_cons(2).all?{|p, n| (p <=> n) != 1} # => true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8789 次 |
| 最近记录: |