此问题来自我之前提出的类似问题: Splitting an array into sub arrays
我一直在努力使用这段代码。我有一组数据“master”,每个元素都有一个lft& rgt值。我希望将这个“master”数组分解为一个子数组“groups”数组。这些子阵列的所需分组如下所示。
创建新子阵列的触发器是lft值不在lft&之间的位置。数组中第一个elemenet的rgt值。
我的想法是: a)初始化第一个数组,然后遍历其余元素。 b)检查元素的lft值与lft& rgt最后一个子数组中第一个元素的值。 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
答案 0 :(得分:0)
new
是一个Class方法,用于创建Class的新实例。例如,一个对象。 groups
是Array类的实例,这就是为什么它没有new
方法。如果您对类方法与实例方法不太熟悉,checkout this article。
因此,如果您想在groups数组的末尾添加一个新数组,您可以更改它:
groups.new
对此:
groups << Array.new
但是,您可以使用Array初始化简写,就像初始化master
数组的方式一样:
groups << []