Ruby on rails 对rails中的对象集合进行排序?
我知道我可以使用像User.sort{a,b | a.attribute b.attribute}或User.find和order这样的东西,但是这是一种类似于Java中可比较接口的方式,所以每次调用User对象上的sort时,它都会对预定义的属性进行排序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)
谢谢,您可以通过为对象定义
方法来实现这一点。这样,您就可以说: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并定义自己的方法,这是正确的。然而,我只是指你的问题。