Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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中的s元素属性_Ruby_Arrays_Sorting - Fatal编程技术网

按数组排序';ruby中的s元素属性

按数组排序';ruby中的s元素属性,ruby,arrays,sorting,Ruby,Arrays,Sorting,我有一个从自定义类创建的对象数组。自定义类有一些属性,我想按其中一个属性对数组排序?有没有一种简单的方法可以在ruby上实现这一点,或者我应该从头开始编写代码 例如: class Example attr_accessor :id, :number def initialize(iid,no) @id = iid @number = no end end exarray = [] 1000.times do |n| exarray[n] = Example.n

我有一个从自定义类创建的对象数组。自定义类有一些属性,我想按其中一个属性对数组排序?有没有一种简单的方法可以在ruby上实现这一点,或者我应该从头开始编写代码

例如:

class Example
  attr_accessor :id, :number

  def initialize(iid,no)
    @id = iid
    @number = no
  end
end

exarray = []
1000.times do |n|
  exarray[n] = Example.new(n,n+5)
end
这里我想按元素对exarray进行排序
number
属性。

试试:

exarray.sort { |a, b| a.number <=> b.number }
exarray.sort{| a,b | a.number b.number}
可能是最短的选项

exarray.sort_by {|x| x.number}
这同样有效

exarray.sort_by &:number

如果希望将此逻辑封装在类中,请在类上实现一个
方法,您可以告诉Ruby如何比较这种类型的对象。以下是一个基本示例:

class Example
  include Comparable  # optional, but might as well
  def <=>(other)
    this.number <=> other.number
  end
end
类示例
包括可比较的#可选,但也可以
def(其他)
这个号码,其他号码
结束
结束
现在您可以调用
exarray.sort
,它将“正常工作”


进一步阅读:

  • (数组#排序)

如果可以,请始终使用sort\u by而不是sort。格伦·麦克唐纳:一个小小的解释可能会很好。
sort\u by
的两个优点是它更短、更简洁,并且它包含一个隐式的Schwartzian变换,以避免为排序中的每个比较计算昂贵的东西。