将数组拆分为子数组2

时间:2014-11-27 00:51:36

标签: ruby-on-rails arrays

此问题来自我之前提出的类似问题: 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

1 个答案:

答案 0 :(得分:0)

new是一个Class方法,用于创建Class的新实例。例如,一个对象。 groups是Array类的实例,这就是为什么它没有new方法。如果您对类方法与实例方法不太熟悉,checkout this article

因此,如果您想在groups数组的末尾添加一个新数组,您可以更改它:

groups.new

对此:

groups << Array.new

但是,您可以使用Array初始化简写,就像初始化master数组的方式一样:

groups << []