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