Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 on rails 对rails中的对象集合进行排序?_Ruby On Rails_Ruby_Object_Sorting - Fatal编程技术网

Ruby on rails 对rails中的对象集合进行排序?

Ruby on rails 对rails中的对象集合进行排序?,ruby-on-rails,ruby,object,sorting,Ruby On Rails,Ruby,Object,Sorting,我知道我可以使用像User.sort{a,b | a.attribute b.attribute}或User.find和order这样的东西,但是这是一种类似于Java中可比较接口的方式,所以每次调用User对象上的sort时,它都会对预定义的属性进行排序 谢谢,您可以通过为对象定义方法来实现这一点。这样,您就可以说:collection.sort用于非破坏性排序,或者collection.sort用于就地排序: 因此,举个例子: class A def <=>(other)

我知道我可以使用像User.sort{a,b | a.attribute b.attribute}或User.find和order这样的东西,但是这是一种类似于Java中可比较接口的方式,所以每次调用User对象上的sort时,它都会对预定义的属性进行排序


谢谢,

您可以通过为对象定义
方法来实现这一点。这样,您就可以说:
collection.sort
用于非破坏性排序,或者
collection.sort用于就地排序:

因此,举个例子:

class A
   def <=>(other)
      # put sorting logic here
   end
end
A类
def(其他)
#把排序逻辑放在这里
结束
结束
还有一个更完整的:

class A
    attr_accessor :val
    def initialize
       @val = 0
    end

    def <=>(other)
       return @val <=> other.val
    end
end

a = A.new
b = A.new
a.val = 5
b.val = 1
ar = [a,b]
ar.sort!
ar.each do |x|
  puts x.val
end
A类
属性存取器:val
def初始化
@val=0
结束
def(其他)
返回@val other.val
结束
结束
新的
b=A.新的
a、 val=5
b、 val=1
ar=[a,b]
ar排序!
ar.每个do | x|
放x.val
结束

这将输出
1
5

您可以通过为对象定义
方法来实现。这样,您就可以说:
collection.sort
用于非破坏性排序,或者
collection.sort用于就地排序:

因此,举个例子:

class A
   def <=>(other)
      # put sorting logic here
   end
end
A类
def(其他)
#把排序逻辑放在这里
结束
结束
还有一个更完整的:

class A
    attr_accessor :val
    def initialize
       @val = 0
    end

    def <=>(other)
       return @val <=> other.val
    end
end

a = A.new
b = A.new
a.val = 5
b.val = 1
ar = [a,b]
ar.sort!
ar.each do |x|
  puts x.val
end
A类
属性存取器:val
def初始化
@val=0
结束
def(其他)
返回@val other.val
结束
结束
新的
b=A.新的
a、 val=5
b、 val=1
ar=[a,b]
ar排序!
ar.每个do | x|
放x.val
结束

这将输出
1
5

我刚刚发现ruby有可比较的模块,我们可以在一个方法define中实现所有比较操作。使用它只是在你想要的任何类中包含Compariable,这是一样的。如果包含Compariable,则仍然需要定义自己的
方法。问题是,您只有一行额外的代码,这不会有任何用途。它确实有一些用途,即您希望对象具有比较操作(<=>)。不要单独定义它,只需包含Comparable并定义自己的方法,这是正确的。然而,我只是提到你的问题,我刚刚发现ruby有可比较的模块,我们可以在一个方法define中实现所有比较操作。使用它只是在你想要的任何类中包含Compariable,这是一样的。如果包含Compariable,则仍然需要定义自己的
方法。问题是,您只有一行额外的代码,这不会有任何用途。它确实有一些用途,即您希望对象具有比较操作(<=>)。不要单独定义它,只需包含Comparable并定义自己的方法,这是正确的。然而,我只是指你的问题。