簡體   English   中英

使用泛型檢查Swift Array項目的存在

[英]Check existence of Swift Array item with Generic

我想創建一個Swift Array的擴展,該擴展返回隨機N個元素。

extension Array {
  func getRandomItems(max:Int) -> [T] {
    var randomItems = [T]()

    repeat
    {
      let randomNumber = Int(arc4random_uniform(UInt32(self.count)))
      if contains(randomItems, self[randomNumber]) {
        randomItems.append(self[randomNumber])
      }
    } while (randomItems.count < max)

    return randomItems
  }

}


print(["Canada","Brazil","China","Japan","U.S"].getRandomNumbers(3))

編譯器說“不能使用類型為[[T],T)的參數列表調用'contains''如何使此函數起作用?

您需要確保只擴展符合Equatable數組。 另外,在最新的beta中, T已替換為Element

extension Array where Element : Equatable {
  func getRandomItems(max:Int) -> [Element] {
    var randomItems = [Element]()

    repeat
    {
      let randomNumber = Int(arc4random_uniform(UInt32(self.count)))
      if randomItems.contains(self[randomNumber]) {
        randomItems.append(self[randomNumber])
      }
    } while (randomItems.count < max)

    return randomItems
  }

}

您的行if randomItems.contains(self[randomNumber])應該是if !randomItems.contains(self[randomNumber])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM