如何删除重复值并在 Swift 中创建 table 视图部分?

How to remove duplicates values and create a table view section in Swift?

感谢大家的帮助,我有一本包含字典数组的字典。 我的 objective 是从一个内部字典值中整理出一个从 plist 文件中读取的数组。值为String类型,returns为重复值数组。这个返回的数组总共有 30 个值(元素),可以分为 6 个值。我需要以某种方式创建一个包含这 6 个值的数组,以便我可以在我的 tableView 数据源 numberOfSectionsInTableView:

上使用它

我查看了 map() 和 filter() 但无法找到任何解决方案。我的代码是;

 // setupLoading called from viewDidLoad()
 func setupLoading() {
    let path = NSBundle.mainBundle
    let bundlePath = path.pathForResource("KempfRef", ofType: "plist")
    let dict: NSDictionary? = NSDictionary(contentsOfFile: bundlePath!)
    let plistArray: NSArray = dict!["KempfRef"] as NSArray

    for innerDict in plistArray as Array {


             let kempf: KempfFiber = KempfFiber() // Model
             kempf.name = innerDict["Name"] as String
             kempf.detail = innerDict["Detail"] as String
             kempf.imageName = innerDict["ImageName"] as String
             kempf.specGrav = innerDict["SpecGrav"] as String
             kempf.toughness = innerDict["Toughness"] as String
             kempf.pdfFile = innerDict["PDF"] as String
             //println("DESCRIPTION: \(kempf.description())")

             var theType = innerDict["Type"] as String             
             var kempfTypes = [String](arrayLiteral: theType)

             println("theType")
  }

// 这里是 theType 的 println 类型是:

BERKempf
BERKempf
BERKempf
BERKempf
CHRYBERKempf
CHRYBERKempf
CHRYBERKempf
CORUNKempf
CORUNKempf
CORUNKempf
CORUNKempf
GARNKempf
GARNKempf
GARNKempf
GARNKempf
GARNKempf
GARNKempf
GARNKempf
OTHERKempf
OTHERKempf
OTHERKempf
OTHERKempf
OTHERKempf
OTHERKempf
OTHERKempf
SPINEKempf
SPINEKempf
SPINEKempf
SPINEKempf

谢谢大家

我将创建另一个字典,其中包含一个字符串键(这将是您的类型)和一个 KempfFiber 数组作为值。然后当你得到一个类型时,你从字典中检索数组。如果为 nil 则创建一个新数组,将 kempf 对象添加到其中,否则只需将 kempf 对象添加到现有数组。然后,您可以将键作为您的部分的数组。

类似这样的东西(其中 kempfDatasectionKeys 是您当前 class -

的属性
self.kempfData=[String:[KempfFiber]]    

for innerDict in plistArray as Array {
    let kempf: KempfFiber = KempfFiber() // Model
    kempf.name = innerDict["Name"] as String
    kempf.detail = innerDict["Detail"] as String
    kempf.imageName = innerDict["ImageName"] as String
    kempf.specGrav = innerDict["SpecGrav"] as String
    kempf.toughness = innerDict["Toughness"] as String
    kempf.pdfFile = innerDict["PDF"] as String

    var theType = innerDict["Type"] as String     

    var kempfArray=self.kempfData[theType]

    if (kempfArray ==nil) {
        kempfArray =[Kempf]()     
    }

    kempfArray!.append(kempf)
    self.kempfData[theType]= kempfArray

  }

  self.sectionKeys=Array(self.kempfData.keys)

现在您可以 return sectionKeys.count 作为您的部分计数。 您的 numberOfRowsInSection 将是

 let sectionData=self.kempfData[self.sectionKeys[indexPath.section]]

 if (sectionData != nil) {
     return sectionData!.count
 }
 else {
     return 0
 }

同样,在您 cellForRowAtIndexPath 中,您可以使用

访问数据
let sectionData=self.kempfData[self.sectionKeys[indexPath.section]]

if (sectionData != nil) {
     let kempf=sectionData[indexPath.row]
     // Configure your cell...
}
else {
    // Something bad happened
}

您可能希望在创建 self.sectionKeys 数组后对其进行排序,以便您的部分按字母顺序排列。