Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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中按属性对对象数组排序会引发未定义的方法错误_Ruby_Sorting - Fatal编程技术网

在ruby中按属性对对象数组排序会引发未定义的方法错误

在ruby中按属性对对象数组排序会引发未定义的方法错误,ruby,sorting,Ruby,Sorting,我是ruby世界的新手,目前正在努力编写以下代码: class Item attr_accessor :x, :y def initialize(x,y) @x, @y = x, y end def to_s "(#@x,#@y)" end end a = Item.new(1,nil) b = Item.new(2,nil) c = Item.new(3,nil) d = Item.new(4,nil) e = Item.new(5,12) f = Item

我是ruby世界的新手,目前正在努力编写以下代码:

class Item
  attr_accessor :x, :y
  def initialize(x,y)
    @x, @y = x, y
  end
  def to_s
    "(#@x,#@y)"
  end
end
a = Item.new(1,nil)
b = Item.new(2,nil)
c = Item.new(3,nil)
d = Item.new(4,nil)
e = Item.new(5,12)
f = Item.new(6,5)
g = Item.new(12,6)

ar = [ a, b, c, d, e, f,g]
ar.sort! {|i1,i2| (i2.y?i2.y:i2.x) <=> (i1.y?i1.y:i1.x)}
puts array.ar("\n")
显然,x是Item类实例的一种方法,所以我猜i1和i2不是Item类的实例——但如果不是,那么它们是什么

(顺便说一句,我在这里要做的是根据属性y对对象数组进行排序,如果y为nil,则根据属性x进行排序)


感谢您对ruby新手的帮助

您需要一些空白。任何以
开头的令牌都是Ruby中的符号

ar.sort! {|i1,i2| (i2.y ? i2.y : i2.x) <=> (i1.y ? i1.y : i1.x)}
ar.sort!{| i1,i2 |(i2.y?i2.y:i2.x)(i1.y?i1.y:i1.x)}

最后一行,
放置ar
是可以的。

您需要一些空白。任何以
开头的令牌都是Ruby中的符号

ar.sort! {|i1,i2| (i2.y ? i2.y : i2.x) <=> (i1.y ? i1.y : i1.x)}
ar.sort!{| i1,i2 |(i2.y?i2.y:i2.x)(i1.y?i1.y:i1.x)}
最后一行,
puts ar
没问题。

BTW,
(i2.y?i2.y:i2.x)
说得更简单些
(i2.y | i2.x)
(i2.y?i2.y:i2.x)说得更简单些
(i2.y | i2.x)