-1
votes

Swift Collect Class Array pour une valeur

J'ai une grasse de classe xxx

et ajoutez des données à ce tableau: xxx

et avoir 3 articles dans TRADERARRAY Je veux mettre Trainerarray à l'intérieur de la section UitailView pour Trainerarraray [indexpath.section] .name

et tout bon, mais j'ai 2 section avec nom "nom1" et "nom2"

i «m Essayez de trier par nom, mais cela n'a pas aidé

Comment puis-je collecter TrainerARRAY pour votre nom? Exemple:

maintenant j'ai: xxx

Je veux voir: xxx


2 commentaires

Qu'en est-il des autres champs comme trainherewsidSide ? \


@Pgdev, non, j'ai besoin de collecter par nom


3 Réponses :


0
votes

Groupe Le TrainerARray CODE> basé sur le nom à l'aide du dictionnaire code> code> init (groupement: par:) code> strong>.

Créer un tableau de code> de uples code> contenant nom code> et tous les éléments correspondant code> correspondant à ce nom code> . p> xxx pré>

maintenant dans ViewDidload () code>, définissez le groupétrainerarray code> comme p> xxx

Suivant, utilisez groupétrainerarray code> comme TableView's's code> datasource code>. p>

func numberOfSections(in tableView: UITableView) -> Int {
    return groupedTrainerArray.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return groupedTrainerArray[section].items.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let item = groupedTrainerArray[indexPath.section].items[indexPath.row]
    //rest of the code...
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return groupedTrainerArray[section].name
}


0 commentaires

0
votes
class TrainerModel {

    var name: String
    var items: [String]
    var collapsed: Bool
    var trainerNewsID: String

    init(name: String,
         items: [String],
         collapsed: Bool = false,
         trainerNewsID: String) {
        self.name = name
        self.items = items
        self.collapsed = collapsed
        self.trainerNewsID = trainerNewsID
    }
}

extension TrainerModel: CustomStringConvertible {
    var description: String {
        return "name \(name); items \(items); collapsed \(collapsed); trainerNewsID \(trainerNewsID)"
    }
}

extension Array where Element == TrainerModel {
    func createNewWithMergedUniqueKeys() -> Array<TrainerModel> {
        var setOfKeys: Set<String> = []
        var dictOfIndicies: [String: Int] = [:]
        for index in 0..<count {
            let trainerModel = self[index]
            let name = trainerModel.name
            setOfKeys.insert(trainerModel.name)
            dictOfIndicies[name] = index
        }
        var resArray: [TrainerModel] = []
        for key in setOfKeys {
            var resSet: Set<String> = []
            filter { $0.name == key }
                .map { $0.items }
                .forEach { array in
                    array.forEach { resSet.insert($0) }
                }
            guard let index = dictOfIndicies[key] else {
                continue
            }
            let trainerModel = self[index]
            trainerModel.items = Array<String>(resSet)
            resArray.append(trainerModel)
        }
        return resArray
    }
}

    var trainerArray = [TrainerModel]()


    let firstItem = TrainerModel(name: "Name1", items: ["first", "second"], collapsed: false, trainerNewsID: "TestID")
    let secondtItem = TrainerModel(name: "Name1", items: ["third", "else", "test"], collapsed: false, trainerNewsID: "TestID2")
    let thirdItem = TrainerModel(name: "Name2", items: ["first", "second"], collapsed: false, trainerNewsID: "TestID3")

    trainerArray.append(firstItem)
    trainerArray.append(secondtItem)
    trainerArray.append(thirdItem)

    print(trainerArray.createNewWithMergedUniqueKeys())

0 commentaires

0
votes

Commencer avec votre TrainerARray CODE>:

[["first", "second", "third", "else", "test"], ["first", "second"]]


0 commentaires