2016-06-23 60 views
0

我有兩個陣列針對我比較[INT]如何刪除數組中的一個重複值?

let filter = strongAgainstArray.filter{weakAgainstArray.contains($0)} 

這返回公共值在2個數組的數組。然後我想通過和每個陣列,這是我正在做像這樣

for item in filter { 
    for var i = 0; i < strongAgainstArray.count; i += 1 { 
     if item == strongAgainstArray[i] { 
      strongAgainstArray.removeAtIndex(i) 
      print("Removing a Strong against index \(item)") 
     } 
    } 
    for var i = 0; i < weakAgainstArray.count; i += 1 { 
     if item == weakAgainstArray[i] { 
      weakAgainstArray.removeAtIndex(i) 
      print("Removing a Weak against index \(item)") 
     } 
    } 
} 

這正常刪除這些值,但是我們要說我的陣列中的一個包含12兩個的情況爲例條目。我如何才能刪除其中的一個?就目前而言,12的所有條目都被完全刪除。

編輯

我現在用的比較

let commonValues = Array(Set(strongAgainstArray).intersect(weakAgainstArray))

,然後將這些commonValues每個陣列我的兩個陣列,

cleanStrongAgainstArray = Array(Set(strongAgainstArray).subtract(Set(commonValues)).sort()) 

cleanWeakAgainstArray = Array(Set(weakAgainstArray).subtract(Set(commonValues)).sort()) 

這是一個更好的整體解決方案,但我仍然遇到同樣的問題,儘管與以前有些不同。

在操場上,例如...

let array = [7,7,9] 
let test = Array(Set(array)) 

測試回來含[7, 9],我需要保持額外7.我該怎麼辦呢?

+0

如果您的數組的值是themse中是唯一的lves,你應該考慮使用Sets,因爲他們已經建立了這些類型的操作的方法。如下所示:http://stackoverflow.com/questions/24589181/set-operations-union-intersection-on-swift-array – Ike10

+0

你需要保持數組的順序嗎? – Paulw11

+0

還有一點需要注意,像這樣構建循環會導致問題,因爲在循環時會改變數組的長度。 –

回答

5

如果陣列的順序並不重要,那麼可以使用集容易地實現了整個解決方案:

let dirtyArray = [1,4,6,1,56,4,4,66,23,3,3,12] 
let dirtyArray1 = [3,1,6,99,54] 

let cleanArray = Array(Set(dirtyArray).union(Set(dirtyArray1))) 

print (cleanArray) 

[12,54,23,4,6,66,99,56 ,1,3]

+0

這是比我使用的更清潔的解決方案,但我仍然遇到問題。它看起來像我任何時候將'Array'轉換爲'Set'這是結合了常見的值。例如'[7,7,9]'在轉換後變成'[7,9]' – Coltrane

2

如果順序很重要,使用NSOrderedSet

let strongAgainstArray = [1, 2, 3, 4] 
let weakAgainstArray = [3, 4, 5, 6] 

let result = NSOrderedSet(array: (strongAgainstArray + weakAgainstArray)).array 
相關問題