例子我有此數組:Rails如何從某些組合中刪除obj?
@packages = ["2", ["4", "2", "1"], "4", ["4","2"], ["5", "6"]]
2
和4
可能無法由
那裏["4", "2", "1"]
和["4,"2"]
應該從陣列中移除
應該怎樣做呢?
所以輸出將是:@packages = ["2", "4", ["5", "6"]]
2和4僅是一個例子。而且數字的數量也有所不同。
例子我有此數組:Rails如何從某些組合中刪除obj?
@packages = ["2", ["4", "2", "1"], "4", ["4","2"], ["5", "6"]]
2
和4
可能無法由
那裏["4", "2", "1"]
和["4,"2"]
應該從陣列中移除
應該怎樣做呢?
所以輸出將是:@packages = ["2", "4", ["5", "6"]]
2和4僅是一個例子。而且數字的數量也有所不同。
如果要刪除陣列,具有共同的至少2個元素給出的事:
@packages = ["2", ["4", "2", "1"], "4", ["4","2"], ["3", "2"]]
@opposites = ["2", "4"]
@packages.reject! { |p| p.is_a?(Array) && (@opposites & p).size >= 2 }
這@packages => ["2", "4", ["3", "2"]]
唯一的問題是,如果@opposites是[「2」,「4」,「9」],它只會刪除100%的匹配而不是[「2」,「 4「]你可以在這裏看到它http://pastie.org/3220682 –
如果不是'100%匹配',我仍然沒有得到你想達到的目標。 – tomgi
示例可能不在一起的數字是[「2」,「4」,「9」]。然後應該刪除任何具有這些組合的數組:[「2」,「4」]和[「2」,「9」]和[「2」,「4」,「9」]。想想它是否像一個有關係的船。數組中的數組可能只有數字2,4和9中的一個。 –
正如已經評論的那樣,你的問題並不完全清楚。如果你只是想刪除主數組的數組元素,那麼你可以做。
@packages.reject{|element| element.is_a?(Array)}
我不想刪除數組中的所有數組。只有那些有2和4組合的數組 –
最簡單的方法後,看是否數組有兩個"2"
和"4"
是使用Array#&
(即設置十字路口):
@packages.reject { |a| a.is_a?(Array) && (a & [ '2', '4' ]).length == 2 }
例如:
>> @packages = ["2", ["4", "2", "1"], "4", ["4","2"], ["5", "6"], ["1", "2"], ["4", "11"], ["2", "2", "4"]]
=> ["2", ["4", "2", "1"], "4", ["4", "2"], ["5", "6"], ["1", "2"], ["4", "11"], ["2", "2", "4"]]
>> @packages.reject { |a| a.is_a?(Array) && (a & [ '2', '4' ]).length == 2 }
=> ["2", "4", ["5", "6"], ["1", "2"], ["4", "11"]]
如果您在一個單獨的陣列拒絕列表那麼上面的概括很容易:
rejects = %w(2 4)
@packages.reject { |a| a.is_a?(Array) && (a & rejects).length == rejects.length }
你只需要確保rejects
沒有任何重複,但你總是可以添加一個uniq
,如果你不確定rejects
是否有重複。
這並不完全清楚你想問什麼......你的輸入的一般形式和你的預期輸出是什麼? –
數組中的數字2和4可能不在一起,並且應該刪除這些數字的任意組合。我寫了輸出。 –
什麼是混合? – tokland