簡體   English   中英

Swift iOS-如何基於相似的屬性將單個對象的數組分類為單獨的數組

[英]Swift iOS -How to sort array of individual objects into separated arrays based on similar property

我有arraySuper Hero對象。 我想將基於name property的超級英雄分組到separated arrays ,然后計算每個單獨的separated array有多少個對象

賓語:

class SuperHero{
    var name: String?
    var power: Bool?
}

超級英雄數組(可以有無數個超級英雄)

var superHeroes = [SuperHero]()

let superHero1 = SuperHero()
superHero1.name = "SuperMan"
superHero1.power = true

superHeroes.append(superHero1)

let superHero2 = SuperHero()
superHero2.name = "BatMan"
superHero2.power = true

superHeroes.append(superHero2)

let superHero3 = SuperHero()
superHero3.name = "BatMan"
superHero3.power = true

superHeroes.append(superHero3)

let superHero4 = SuperHero()
superHero4.name = "SuperMan"
superHero4.power = true

superHeroes.append(superHero4)

//etc...

使用名稱屬性進行排序:

let sortedHeros = superHeroes.sort{$0.name < $1.name}
for hero in sortedHeros{
    print(hero.name)
    /*
    prints
    BatMan
    BatMan
    SuperMan
    SuperMan
    */
}

如何將排序后的數組放入單獨的數組中,然后打印每個單獨的數組的計數?

//this is what I want
separatedArraysOfSuperHeroes = [[superHero2, superHero3], [superHero1, superHero4]]

//subscriprting isn't ideal because i'll never know the exact number of separated arrays
print(separatedArraysOfSuperHeroes[0].count)
print(separatedArraysOfSuperHeroes[1].count)

根據評論,我想要子數組的原因是因為我想使用它們來填充不同的tableview部分。 例如,在我的tableview中,我現在有兩個部分。 第一部分的標題為“ Batman”,里面有2個蝙蝠俠對象,第二部分的標題為“超人”,里面有2個超人對象。 count屬性將顯示每個部分中超級英雄對象的數量。

func getSeparatedArrayBasedOnName(superHeroes: [SuperHero]) -> [[SuperHero]] {

    guard let superNames = NSOrderedSet.init(array: superHeroes.map { $0.name ?? "" }).array as? [String] else {
        print("Something went wrong with conversion")
        return [[SuperHero]]()
    }

    var filteredArray = [[SuperHero]]()

    for superName in superNames {
        let innerArray = superHeroes.filter({ return $0.name == superName })
        filteredArray.append(innerArray)
    }

    for array in filteredArray {
        for hero in array {
            print(hero.name ?? "")
        }
    }

    return filteredArray
}

暫無
暫無

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

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