2017-09-13 36 views
0

上設置和陣列讀了我發現,一個集不能,或不能存儲重複值(整型,字符串等)。重複詮釋在陣,字典或設置SWIFT

認識到這一點,如果我們要解決在陣列中找到重複的詮釋,一個方法是將數組轉換成集,怎麼來的,一旦陣列是一組我們沒有得到一個錯誤?如果陣列包含重複

下面的方法簡單地返回一個布爾值。

import UIKit 

func containsDuplicatesDictionary(a: [Int]) -> Bool { 

    var aDict = [Int : Int]() 

    for value in a { 
     if let count = aDict[value] { 
      aDict[value] = count + 1 
      return true 
     } else { 
      aDict[value] = 1 
     } 
    } 

    return false 
} 

containsDuplicatesDictionary(a: [1,2,2,4,5]) 

func containsDuplicatesSet(a: [Int]) -> Bool { 
    return Set(a).count != a.count 
} 

containsDuplicatesSet(a: [1,2,2,4]) 

第一功能,containsDuplicatesDictionary,我的數組轉換成詞典,當然這需要一個for循環爲好。 Set方法可以在一行中完成,這非常好。但我猜想,因爲我是新手,我認爲轉換數組會立即拋出一個錯誤,因爲它們重複的值。

我缺少什麼時,它的轉換

謝謝。

回答

0

集,通過設計元素的無序,獨特的收藏。 Set的實現會自動處理重複值,當您嘗試添加重複值時,它會檢查該值是否已存在於Set中,如果是,則不會添加該值。

當你調用集合,接受一個序列作爲輸入參數初始化(這是你寫Set(a),其中a[Int]型,引擎蓋下時使用何種,初始化添加元素逐一檢查是否任何新元素都已經存在於Set中

您可以爲Set創建一個自定義的初始化方法,如果您嘗試向其中添加重複值時會拋出錯誤,但它不會真的有,只是不添加值斯威夫特,因此目前執行的任何用戶的任何優勢,如果它已經存在於集,並且不引發錯誤。這樣一來,就可以安全,輕鬆地擺脫任何重複的在一個非唯一的元素集合(如數組)。

+0

好了,所以如果我想追加同等價值的另一種詮釋,我就可以把它轉換回一個數組。 –

+0

是的,沒錯。 –