Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/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 - Fatal编程技术网

Ruby 按属性对数组中的连续哈希进行分组

Ruby 按属性对数组中的连续哈希进行分组,ruby,Ruby,我希望能够从一系列约会中找到nx个连续约会的组 我的数据如下所示: [{:event_id=>295, :appointment=>false, :accounted=>false}, {:event_id=>296, :appointment=>false, :accounted=>false}, {:event_id=>297, :appointment=>false, :accounted=>false}, {:e

我希望能够从一系列约会中找到nx个连续约会的组

我的数据如下所示:

  [{:event_id=>295, :appointment=>false, :accounted=>false},
   {:event_id=>296, :appointment=>false, :accounted=>false},
   {:event_id=>297, :appointment=>false, :accounted=>false},
   {:event_id=>311, :appointment=>false, :accounted=>false},
   {:event_id=>312, :appointment=>false, :accounted=>false},
   {:event_id=>313, :appointment=>false, :accounted=>false},
   {:event_id=>314, :appointment=>396, :accounted=>false},
   {:event_id=>315, :appointment=>397, :accounted=>false},
   {:event_id=>316, :appointment=>398, :accounted=>false},
   {:event_id=>317, :appointment=>false, :accounted=>false},
   {:event_id=>318, :appointment=>399, :accounted=>false},
   {:event_id=>319, :appointment=>false, :accounted=>false},
   {:event_id=>320, :appointment=>400, :accounted=>false},
   {:event_id=>321, :appointment=>401, :accounted=>false}]>
arr, arr1 = [], []
my_data.each do |e|
    arr << e if e[:appointment] != false
    arr = [] if e[:appointment] == false
    if arr.count == 3
       arr1 += arr
       arr = []
    end
end

2.1.2 :084 > arr1
 => [{:event_id=>314, :appointment=>396, :accounted=>false}, {:event_id=>315, :appointment=>397, :accounted=>false}, {:event_id=>316, :appointment=>398, :accounted=>false}]
我希望能够找到任何3个连续的预约组。因此,在本例中,事件314315316是唯一应该返回的组

老实说,我甚至不知道从哪里开始…

你可以这样尝试:

  [{:event_id=>295, :appointment=>false, :accounted=>false},
   {:event_id=>296, :appointment=>false, :accounted=>false},
   {:event_id=>297, :appointment=>false, :accounted=>false},
   {:event_id=>311, :appointment=>false, :accounted=>false},
   {:event_id=>312, :appointment=>false, :accounted=>false},
   {:event_id=>313, :appointment=>false, :accounted=>false},
   {:event_id=>314, :appointment=>396, :accounted=>false},
   {:event_id=>315, :appointment=>397, :accounted=>false},
   {:event_id=>316, :appointment=>398, :accounted=>false},
   {:event_id=>317, :appointment=>false, :accounted=>false},
   {:event_id=>318, :appointment=>399, :accounted=>false},
   {:event_id=>319, :appointment=>false, :accounted=>false},
   {:event_id=>320, :appointment=>400, :accounted=>false},
   {:event_id=>321, :appointment=>401, :accounted=>false}]>
arr, arr1 = [], []
my_data.each do |e|
    arr << e if e[:appointment] != false
    arr = [] if e[:appointment] == false
    if arr.count == 3
       arr1 += arr
       arr = []
    end
end

2.1.2 :084 > arr1
 => [{:event_id=>314, :appointment=>396, :accounted=>false}, {:event_id=>315, :appointment=>397, :accounted=>false}, {:event_id=>316, :appointment=>398, :accounted=>false}]
arr,arr1=[],[]
我的U数据。每个都有|
arr-arr1
=>[{:事件id=>314,:约会=>396,:占位=>false},{:事件id=>315,:约会=>397,:占位=>false},{:事件id=>316,:约会=>398,:占位=>false}]
您可以这样尝试:

  [{:event_id=>295, :appointment=>false, :accounted=>false},
   {:event_id=>296, :appointment=>false, :accounted=>false},
   {:event_id=>297, :appointment=>false, :accounted=>false},
   {:event_id=>311, :appointment=>false, :accounted=>false},
   {:event_id=>312, :appointment=>false, :accounted=>false},
   {:event_id=>313, :appointment=>false, :accounted=>false},
   {:event_id=>314, :appointment=>396, :accounted=>false},
   {:event_id=>315, :appointment=>397, :accounted=>false},
   {:event_id=>316, :appointment=>398, :accounted=>false},
   {:event_id=>317, :appointment=>false, :accounted=>false},
   {:event_id=>318, :appointment=>399, :accounted=>false},
   {:event_id=>319, :appointment=>false, :accounted=>false},
   {:event_id=>320, :appointment=>400, :accounted=>false},
   {:event_id=>321, :appointment=>401, :accounted=>false}]>
arr, arr1 = [], []
my_data.each do |e|
    arr << e if e[:appointment] != false
    arr = [] if e[:appointment] == false
    if arr.count == 3
       arr1 += arr
       arr = []
    end
end

2.1.2 :084 > arr1
 => [{:event_id=>314, :appointment=>396, :accounted=>false}, {:event_id=>315, :appointment=>397, :accounted=>false}, {:event_id=>316, :appointment=>398, :accounted=>false}]
arr,arr1=[],[]
我的U数据。每个都有|
arr-arr1
=>[{:事件id=>314,:约会=>396,:占位=>false},{:事件id=>315,:约会=>397,:占位=>false},{:事件id=>316,:约会=>398,:占位=>false}]
您可以这样尝试:

  [{:event_id=>295, :appointment=>false, :accounted=>false},
   {:event_id=>296, :appointment=>false, :accounted=>false},
   {:event_id=>297, :appointment=>false, :accounted=>false},
   {:event_id=>311, :appointment=>false, :accounted=>false},
   {:event_id=>312, :appointment=>false, :accounted=>false},
   {:event_id=>313, :appointment=>false, :accounted=>false},
   {:event_id=>314, :appointment=>396, :accounted=>false},
   {:event_id=>315, :appointment=>397, :accounted=>false},
   {:event_id=>316, :appointment=>398, :accounted=>false},
   {:event_id=>317, :appointment=>false, :accounted=>false},
   {:event_id=>318, :appointment=>399, :accounted=>false},
   {:event_id=>319, :appointment=>false, :accounted=>false},
   {:event_id=>320, :appointment=>400, :accounted=>false},
   {:event_id=>321, :appointment=>401, :accounted=>false}]>
arr, arr1 = [], []
my_data.each do |e|
    arr << e if e[:appointment] != false
    arr = [] if e[:appointment] == false
    if arr.count == 3
       arr1 += arr
       arr = []
    end
end

2.1.2 :084 > arr1
 => [{:event_id=>314, :appointment=>396, :accounted=>false}, {:event_id=>315, :appointment=>397, :accounted=>false}, {:event_id=>316, :appointment=>398, :accounted=>false}]
arr,arr1=[],[]
我的U数据。每个都有|
arr-arr1
=>[{:事件id=>314,:约会=>396,:占位=>false},{:事件id=>315,:约会=>397,:占位=>false},{:事件id=>316,:约会=>398,:占位=>false}]
您可以这样尝试:

  [{:event_id=>295, :appointment=>false, :accounted=>false},
   {:event_id=>296, :appointment=>false, :accounted=>false},
   {:event_id=>297, :appointment=>false, :accounted=>false},
   {:event_id=>311, :appointment=>false, :accounted=>false},
   {:event_id=>312, :appointment=>false, :accounted=>false},
   {:event_id=>313, :appointment=>false, :accounted=>false},
   {:event_id=>314, :appointment=>396, :accounted=>false},
   {:event_id=>315, :appointment=>397, :accounted=>false},
   {:event_id=>316, :appointment=>398, :accounted=>false},
   {:event_id=>317, :appointment=>false, :accounted=>false},
   {:event_id=>318, :appointment=>399, :accounted=>false},
   {:event_id=>319, :appointment=>false, :accounted=>false},
   {:event_id=>320, :appointment=>400, :accounted=>false},
   {:event_id=>321, :appointment=>401, :accounted=>false}]>
arr, arr1 = [], []
my_data.each do |e|
    arr << e if e[:appointment] != false
    arr = [] if e[:appointment] == false
    if arr.count == 3
       arr1 += arr
       arr = []
    end
end

2.1.2 :084 > arr1
 => [{:event_id=>314, :appointment=>396, :accounted=>false}, {:event_id=>315, :appointment=>397, :accounted=>false}, {:event_id=>316, :appointment=>398, :accounted=>false}]
arr,arr1=[],[]
我的U数据。每个都有|
arr-arr1
=>[{:事件id=>314,:约会=>396,:占位=>false},{:事件id=>315,:约会=>397,:占位=>false},{:事件id=>316,:约会=>398,:占位=>false}]
您可以使用连续约会对阵列进行分组:

arr = [{:event_id=>295, :appointment=>false, :accounted=>false}, {:event_id=>296, :appointment=>false, :accounted=>false}, {:event_id=>297, :appointment=>false, :accounted=>false}, {:event_id=>311, :appointment=>false, :accounted=>false}, {:event_id=>312, :appointment=>false, :accounted=>false}, {:event_id=>313, :appointment=>false, :accounted=>false}, {:event_id=>314, :appointment=>396, :accounted=>false}, {:event_id=>315, :appointment=>397, :accounted=>false}, {:event_id=>316, :appointment=>398, :accounted=>false}, {:event_id=>317, :appointment=>false, :accounted=>false}, {:event_id=>318, :appointment=>399, :accounted=>false}, {:event_id=>319, :appointment=>false, :accounted=>false}, {:event_id=>320, :appointment=>400, :accounted=>false}, {:event_id=>321, :appointment=>401, :accounted=>false}]

groups = arr.slice_before(appointment: false) { |elt, state|
  a, b = state[:appointment], elt[:appointment] # get previous (a) and current (b) appointment
  state[:appointment] = elt[:appointment]       # update state
  a == false || b == false || a.succ != b       # slicing condition
}

groups.to_a
#=> [[{:event_id=>295, :appointment=>false, :accounted=>false}],
#    [{:event_id=>296, :appointment=>false, :accounted=>false}],
#    [{:event_id=>297, :appointment=>false, :accounted=>false}],
#    [{:event_id=>311, :appointment=>false, :accounted=>false}],
#    [{:event_id=>312, :appointment=>false, :accounted=>false}],
#    [{:event_id=>313, :appointment=>false, :accounted=>false}],
#    [{:event_id=>314, :appointment=>396, :accounted=>false},
#     {:event_id=>315, :appointment=>397, :accounted=>false},
#     {:event_id=>316, :appointment=>398, :accounted=>false}],
#    [{:event_id=>317, :appointment=>false, :accounted=>false}],
#    [{:event_id=>318, :appointment=>399, :accounted=>false}],
#    [{:event_id=>319, :appointment=>false, :accounted=>false}],
#    [{:event_id=>320, :appointment=>400, :accounted=>false},
#     {:event_id=>321, :appointment=>401, :accounted=>false}]]
解释切片条件 在以下情况下,元素将移动到新的组/数组中:

  • 以前的约会为false(
    a==false
  • 当前约会为false(
    b==false
  • 上一次约会不是当前约会的继任者(
    a.succ!=b
否则,即两个约会都不是
false
(我假设约会是
false
或整数),并且前一个约会是当前约会的后续约会,它们保留在同一数组中

查找包含3个或更多项的组现在非常简单:

groups.select { |g| g.size >= 3 }

#=> [[{:event_id=>314, :appointment=>396, :accounted=>false},
#     {:event_id=>315, :appointment=>397, :accounted=>false},
#     {:event_id=>316, :appointment=>398, :accounted=>false}]]
您可以使用按连续约会对阵列进行分组:

arr = [{:event_id=>295, :appointment=>false, :accounted=>false}, {:event_id=>296, :appointment=>false, :accounted=>false}, {:event_id=>297, :appointment=>false, :accounted=>false}, {:event_id=>311, :appointment=>false, :accounted=>false}, {:event_id=>312, :appointment=>false, :accounted=>false}, {:event_id=>313, :appointment=>false, :accounted=>false}, {:event_id=>314, :appointment=>396, :accounted=>false}, {:event_id=>315, :appointment=>397, :accounted=>false}, {:event_id=>316, :appointment=>398, :accounted=>false}, {:event_id=>317, :appointment=>false, :accounted=>false}, {:event_id=>318, :appointment=>399, :accounted=>false}, {:event_id=>319, :appointment=>false, :accounted=>false}, {:event_id=>320, :appointment=>400, :accounted=>false}, {:event_id=>321, :appointment=>401, :accounted=>false}]

groups = arr.slice_before(appointment: false) { |elt, state|
  a, b = state[:appointment], elt[:appointment] # get previous (a) and current (b) appointment
  state[:appointment] = elt[:appointment]       # update state
  a == false || b == false || a.succ != b       # slicing condition
}

groups.to_a
#=> [[{:event_id=>295, :appointment=>false, :accounted=>false}],
#    [{:event_id=>296, :appointment=>false, :accounted=>false}],
#    [{:event_id=>297, :appointment=>false, :accounted=>false}],
#    [{:event_id=>311, :appointment=>false, :accounted=>false}],
#    [{:event_id=>312, :appointment=>false, :accounted=>false}],
#    [{:event_id=>313, :appointment=>false, :accounted=>false}],
#    [{:event_id=>314, :appointment=>396, :accounted=>false},
#     {:event_id=>315, :appointment=>397, :accounted=>false},
#     {:event_id=>316, :appointment=>398, :accounted=>false}],
#    [{:event_id=>317, :appointment=>false, :accounted=>false}],
#    [{:event_id=>318, :appointment=>399, :accounted=>false}],
#    [{:event_id=>319, :appointment=>false, :accounted=>false}],
#    [{:event_id=>320, :appointment=>400, :accounted=>false},
#     {:event_id=>321, :appointment=>401, :accounted=>false}]]
解释切片条件 在以下情况下,元素将移动到新的组/数组中:

  • 以前的约会为false(
    a==false
  • 当前约会为false(
    b==false
  • 上一次约会不是当前约会的继任者(
    a.succ!=b
否则,即两个约会都不是
false
(我假设约会是
false
或整数),并且前一个约会是当前约会的后续约会,它们保留在同一数组中

查找包含3个或更多项的组现在非常简单:

groups.select { |g| g.size >= 3 }

#=> [[{:event_id=>314, :appointment=>396, :accounted=>false},
#     {:event_id=>315, :appointment=>397, :accounted=>false},
#     {:event_id=>316, :appointment=>398, :accounted=>false}]]
您可以使用按连续约会对阵列进行分组:

arr = [{:event_id=>295, :appointment=>false, :accounted=>false}, {:event_id=>296, :appointment=>false, :accounted=>false}, {:event_id=>297, :appointment=>false, :accounted=>false}, {:event_id=>311, :appointment=>false, :accounted=>false}, {:event_id=>312, :appointment=>false, :accounted=>false}, {:event_id=>313, :appointment=>false, :accounted=>false}, {:event_id=>314, :appointment=>396, :accounted=>false}, {:event_id=>315, :appointment=>397, :accounted=>false}, {:event_id=>316, :appointment=>398, :accounted=>false}, {:event_id=>317, :appointment=>false, :accounted=>false}, {:event_id=>318, :appointment=>399, :accounted=>false}, {:event_id=>319, :appointment=>false, :accounted=>false}, {:event_id=>320, :appointment=>400, :accounted=>false}, {:event_id=>321, :appointment=>401, :accounted=>false}]

groups = arr.slice_before(appointment: false) { |elt, state|
  a, b = state[:appointment], elt[:appointment] # get previous (a) and current (b) appointment
  state[:appointment] = elt[:appointment]       # update state
  a == false || b == false || a.succ != b       # slicing condition
}

groups.to_a
#=> [[{:event_id=>295, :appointment=>false, :accounted=>false}],
#    [{:event_id=>296, :appointment=>false, :accounted=>false}],
#    [{:event_id=>297, :appointment=>false, :accounted=>false}],
#    [{:event_id=>311, :appointment=>false, :accounted=>false}],
#    [{:event_id=>312, :appointment=>false, :accounted=>false}],
#    [{:event_id=>313, :appointment=>false, :accounted=>false}],
#    [{:event_id=>314, :appointment=>396, :accounted=>false},
#     {:event_id=>315, :appointment=>397, :accounted=>false},
#     {:event_id=>316, :appointment=>398, :accounted=>false}],
#    [{:event_id=>317, :appointment=>false, :accounted=>false}],
#    [{:event_id=>318, :appointment=>399, :accounted=>false}],
#    [{:event_id=>319, :appointment=>false, :accounted=>false}],
#    [{:event_id=>320, :appointment=>400, :accounted=>false},
#     {:event_id=>321, :appointment=>401, :accounted=>false}]]
解释切片条件 在以下情况下,元素将移动到新的组/数组中:

  • 以前的约会为false(
    a==false
  • 当前约会为false(
    b==false
  • 上一次约会不是当前约会的继任者(
    a.succ!=b
否则,即两个约会都不是
false
(我假设约会是
false
或整数),并且前一个约会是当前约会的后续约会,它们保留在同一数组中

查找包含3个或更多项的组现在非常简单:

groups.select { |g| g.size >= 3 }

#=> [[{:event_id=>314, :appointment=>396, :accounted=>false},
#     {:event_id=>315, :appointment=>397, :accounted=>false},
#     {:event_id=>316, :appointment=>398, :accounted=>false}]]
您可以使用按连续约会对阵列进行分组:

arr = [{:event_id=>295, :appointment=>false, :accounted=>false}, {:event_id=>296, :appointment=>false, :accounted=>false}, {:event_id=>297, :appointment=>false, :accounted=>false}, {:event_id=>311, :appointment=>false, :accounted=>false}, {:event_id=>312, :appointment=>false, :accounted=>false}, {:event_id=>313, :appointment=>false, :accounted=>false}, {:event_id=>314, :appointment=>396, :accounted=>false}, {:event_id=>315, :appointment=>397, :accounted=>false}, {:event_id=>316, :appointment=>398, :accounted=>false}, {:event_id=>317, :appointment=>false, :accounted=>false}, {:event_id=>318, :appointment=>399, :accounted=>false}, {:event_id=>319, :appointment=>false, :accounted=>false}, {:event_id=>320, :appointment=>400, :accounted=>false}, {:event_id=>321, :appointment=>401, :accounted=>false}]

groups = arr.slice_before(appointment: false) { |elt, state|
  a, b = state[:appointment], elt[:appointment] # get previous (a) and current (b) appointment
  state[:appointment] = elt[:appointment]       # update state
  a == false || b == false || a.succ != b       # slicing condition
}

groups.to_a
#=> [[{:event_id=>295, :appointment=>false, :accounted=>false}],
#    [{:event_id=>296, :appointment=>false, :accounted=>false}],
#    [{:event_id=>297, :appointment=>false, :accounted=>false}],
#    [{:event_id=>311, :appointment=>false, :accounted=>false}],
#    [{:event_id=>312, :appointment=>false, :accounted=>false}],
#    [{:event_id=>313, :appointment=>false, :accounted=>false}],
#    [{:event_id=>314, :appointment=>396, :accounted=>false},
#     {:event_id=>315, :appointment=>397, :accounted=>false},
#     {:event_id=>316, :appointment=>398, :accounted=>false}],
#    [{:event_id=>317, :appointment=>false, :accounted=>false}],
#    [{:event_id=>318, :appointment=>399, :accounted=>false}],
#    [{:event_id=>319, :appointment=>false, :accounted=>false}],
#    [{:event_id=>320, :appointment=>400, :accounted=>false},
#     {:event_id=>321, :appointment=>401, :accounted=>false}]]
解释切片条件 在以下情况下,元素将移动到新的组/数组中:

  • 以前的约会为false(
    a==false
  • 当前约会为false(
    b==false
  • 上一次约会不是当前约会的继任者(
    a.succ!=b
否则,即两个约会都不是
false
(我假设约会是
false
或整数),并且前一个约会是当前约会的后续约会,它们保留在同一数组中

查找包含3个或更多项的组现在非常简单:

groups.select { |g| g.size >= 3 }

#=> [[{:event_id=>314, :appointment=>396, :accounted=>false},
#     {:event_id=>315, :appointment=>397, :accounted=>false},
#     {:event_id=>316, :appointment=>398, :accounted=>false}]]
这是我(农业)对它的看法。我还将尝试其他一些解决方案

def remaining_event_apps_consecutive(n)             
        result = []
        consec =[]
        @eas.each do |ea|           
            if ea[:appointment] != false && ea[:accounted] ==false                          
                consec << ea                
            else                
                consec = [] 
            end
            if consec.size == n             
                result << consec
                consec = []
            end
        end
        result
    end
def剩余事件应用程序连续(n)
结果=[]
奉献=[]
@每一个都是
如果ea[:约会]!=false&&ea[:会计]==false
这是我(农业)对它的看法。我还将尝试其他一些解决方案

def remaining_event_apps_consecutive(n)             
        result = []
        consec =[]
        @eas.each do |ea|           
            if ea[:appointment] != false && ea[:accounted] ==false                          
                consec << ea                
            else                
                consec = [] 
            end
            if consec.size == n             
                result << consec
                consec = []
            end
        end
        result
    end
def剩余事件应用程序连续(n)
结果=[]
奉献=[]
@每一个都是
如果ea[:约会]!=false&&ea[:会计]==false
这是我(农业)对它的看法。我还将尝试其他一些解决方案

def remaining_event_apps_consecutive(n)             
        result = []
        consec =[]
        @eas.each do |ea|           
            if ea[:appointment] != false && ea[:accounted] ==false                          
                consec << ea                
            else                
                consec = [] 
            end
            if consec.size == n             
                result << consec
                consec = []
            end
        end
        result
    end
def剩余事件应用程序连续(n)
结果=[]
奉献=[]
@每一个都是
如果ea[:约会]!=false&&ea[:会计]==false
这是我(农业)对它的看法。我还将尝试其他一些解决方案

def remaining_event_apps_consecutive(n)             
        result = []
        consec =[]
        @eas.each do |ea|           
            if ea[:appointment] != false && ea[:accounted] ==false                          
                consec << ea                
            else                
                consec = [] 
            end
            if consec.size == n             
                result << consec
                consec = []
            end
        end
        result
    end
def剩余事件应用程序连续(n)
结果=[]
奉献=[]
@每一个都是
如果ea[:约会]!=false&&ea[:会计]==false

如果事件317丢失,即如果连续约会超过3次,则返回什么?仅前3次连续约会-因为我正在计算哪些约会可以按数量包支付如果