这个问题来自我之前问过的一个类似的问题:将数组拆分为子数组
我已经为这个代码挣扎了一段时间了。我有一个数据“主”数组,每个元素都有一个lft & rgt值。我希望将这个“主”数组分解为一个子数组“group”数组。这些子数组的期望分组如下所示。
创建新子数组的触发器是lft值不在数组中第一个elemenet的lft & rgt值之间的地方。
我的想法是: a)初始化第一个数组,然后循环遍历其余的元素。( b)对照最后一个子数组中第一个元素的lft & rgt值检查元素的lft值。c)如果超出范围,则创建一个新的子数组,d)将元素附加到最后一个子数组。
当我尝试这个方法时,我发现一个未知方法“新”的错误。
def display_visiting
groups = []
master = []
master << { id: 1, name: "Fred", lft: 1, rgt: 4 }
master << { id: 4, name: "Sue", lft: 2, rgt: 3 }
master << { id: 2, name: "May", lft: 5, rgt: 12 }
master << { id: 5, name: "Helen", lft: 6, rgt: 7 }
master << { id: 6, name: "Peter", lft: 8, rgt: 9 }
master << { id: 7, name: "Grace", lft: 10, rgt: 11 }
master << { id: 3, name: "Brian", lft: 13, rgt: 18 }
master << { id: 8, name: "Michael", lft: 14, rgt: 15 }
master << { id: 9, name: "Paul", lft: 16, rgt: 17 }
groups[0] = master.shift(1)
master.each do |employee|
if (employee.lft < groups.last.first.lft) or (employee.lft > groups.last.first.rgt)
groups.new
end
groups.last << employee
end
return groups
else
return nil
end
发布于 2014-11-27 01:08:52
new
是一个类方法,用于创建一个类的新实例。例如一个物体。groups
是数组类的一个实例,这就是为什么它没有new
方法的原因。如果您不太熟悉类方法和实例方法,查看这篇文章。
因此,如果您想在组数组的末尾添加一个新的array,您可以更改如下:
groups.new
对此:
groups << Array.new
但是,您可以使用与初始化master
数组完全相同的数组初始化速记:
groups << []
https://stackoverflow.com/questions/27161404
复制相似问题