代碼
def prune(arr, val)
arr.values_at(*(0..arr.size-4).reject { |i| arr[i][3] == val &&
arr[i+1..i+3].transpose[0,3].map(&:uniq).all? { |a| a.size==1 } }.
concat((arr.size-3..arr.size-1).to_a))
end
例
arr = [ [1,2,3,4,0],
[3,4,5,6,1],
[3,4,5,4,2],
[3,4,5,6,3],
[3,4,5,6,4],
[3,4,0,6,5],
[2,3,5,4,6],
[2,3,5,5,7],
[2,3,5,7,8],
[2,3,5,8,9],
[2,3,5,7,0]
]
注意的arr
元件(陣列)的最後的值是連續的。這是爲了幫助您識別已被刪除的prune(arr, 4)
(下文)的元素。
prune(arr, 4)
# => [[3, 4, 5, 6, 1],
# [3, 4, 5, 4, 2],
# [3, 4, 5, 6, 3],
# [3, 4, 5, 6, 4],
# [3, 4, 0, 6, 5],
# [2, 3, 5, 5, 7],
# [2, 3, 5, 7, 8],
# [2, 3, 5, 8, 9],
# [2, 3, 5, 7, 0]]
說明
在索引0
和6
的陣列還沒有被包含在陣列返回。
arr[0]
([1,2,3,4,0]
)沒有被包括在內,因爲arr[0][3] = val = 4
和arr[1]
,arr[2]
和arr[3]
都開始[3,4,5]
。
arr[6]
([2,3,5,4,6]
)沒有被包括在內,因爲arr[6][3] = 4
和arr[7]
,arr[8]
和arr[9]
都開始[2,3,5]
。
arr[2]
([3,4,5,5,2]
)已被包括在內,因爲,雖然arr[2][3] = 4
,arr[3][0,3]
,arr[4][0,3]
和arr[5][0,3]
所有不全部相等(即,arr[5][2] = 0
)。
請注意,arr
的最後三個元素將始終包含在返回的數組中。
現在讓我們來看看計算。首先考慮以下幾點。
arr.size
#=> 11
a = (0..arr.size-4).reject { |i| arr[i][3] == val &&
arr[i+1..i+3].transpose[0,3].map(&:uniq).all? { |a| a.size==1 } }
#=> (0..7).reject { |i| arr[i][3] == val &&
arr[i+1..i+3].transpose[0,3].map(&:uniq).all? { |a| a.size==1 } }
#=> [1, 2, 3, 4, 5, 7]
考慮爲i=0
(召回val=4
)reject
的塊的計算。
arr[i][3] == val && arr[i+1..i+3].transpose[0,3].map(&:uniq).all? {|a| a.size==1 }}
#=> 4 == 4 && arr[1..3].transpose[0,3].map(&:uniq).all? { |a| a.size==1 }
#=> [[3,4,5,6,1],
# [3,4,5,4,2],
# [3,4,5,6,3]].transpose[0,3].map(&:uniq).all? { |a| a.size==1 }
#=> [[3, 3, 3],
# [4, 4, 4],
# [5, 5, 5],
# [6, 4, 6],
# [1, 2, 3]][0,3].map(&:uniq).all? { |a| a.size==1 }
#=> [[3, 3, 3],
# [4, 4, 4],
# [5, 5, 5]].map(&:uniq).all? { |a| a.size==1 }
#=> [[3], [4], [5]].all? { |a| a.size==1 }
#=> true
含義arr[0]
將被拒絕;即不包括在返回的數組中。 其餘的塊計算(對於i=1,...,10
)是相似的。
我們計算
a #=> [1, 2, 3, 4, 5, 7]
這是除了最後3
將被保留的arr
所有元素的索引。到a
我們添加arr
的最後三個元素的索引。
b = a.concat((arr.size-3..arr.size-1).to_a)
#=> a.concat((8..10).to_a)
#=> a.concat([8,9,10])
#=> [1, 2, 3, 4, 5, 7, 8, 9, 10]
最後,
arr.values_at(*b)
返回在例子中給出的陣列。
我遇到的問題是,我的第一個數組從@projectsandtrials中刪除,它不應該是......但其他一切都很好...... – bwatson30
請編輯一個小例子,包括您的預期結果。而不是數組大小爲10,使它們更小 - 比如5個元素。如果您願意,請隨時使用我在答案中給出的例子。 –