J'ai une grasse de classe et ajoutez des données à ce tableau: p> et avoir 3 articles dans TRADERARRAY
Je veux mettre Trainerarray à l'intérieur de la section UitailView pour Trainerarraray [indexpath.section] .name p> et tout bon, mais j'ai 2 section avec nom "nom1" et "nom2" p> i «m Essayez de trier par nom, mais cela n'a pas aidé p> Comment puis-je collecter TrainerARRAY pour votre nom? Exemple: P> maintenant j'ai: p> Je veux voir: p>
3 Réponses :
Groupe Le Créer un tableau maintenant dans Suivant, utilisez TrainerARray CODE> basé sur le nom à l'aide du dictionnaire code> code>
init (groupement: par:) code> strong>.
de code> de
uples code> contenant
nom code> et tous les éléments
correspondant code> correspondant à ce nom code> . p>
ViewDidload () code>, définissez le
groupétrainerarray code> comme p>
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
}
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())
Commencer avec votre TrainerARray CODE>:
[["first", "second", "third", "else", "test"], ["first", "second"]]
Qu'en est-il des autres champs comme
trainherewsidSide code>? \
@Pgdev, non, j'ai besoin de collecter par nom