J'ai deux tableaux, qui sont utilisés consécutivement.
GlobalArray.sort { $0.isPinned && !$1.isPinned }
3 Réponses :
J'ai créé la même situation que vous souhaitez vérifier ce code.
struct Message {
var isPinned: Bool
}
var pinnedArray: [Message] = [Message(isPinned: true),Message(isPinned: true),Message(isPinned: true),Message(isPinned: true)]
var notPinnedArray: [Message] = [Message(isPinned: false),Message(isPinned: false),Message(isPinned: false),Message(isPinned: false)]
var sortedArray: [Message] = pinnedArray + notPinnedArray // this will put pinned Array first then add the normal one after it so it would be [true, true, ture, true, false, false, false, false ]
var indexForFirstNormalMessage = pinnedArray.count //index for the first normal message is the count of the pinnedArray because array indexing starts at 0 and counting starts at 1 so using the count of the pinned array as index in the sorted one, would get you the first normal message index.
print(indexForFirstNormalMessage) // 4
sortedArray.forEach {message in
print(message)
}
/* Message(isPinned: true)
Message(isPinned: true)
Message(isPinned: true)
Message(isPinned: true)
Message(isPinned: false)
Message(isPinned: false)
Message(isPinned: false)
Message(isPinned: false)*/
Plutôt que d'utiliser l'une des alternatives que vous avez répertoriées, vous pouvez plutôt modifier la manière dont vous accédez à vos tableaux. Vous pouvez utiliser une fonction d'assistance, en prenant une fermeture comme argument, pour traiter chaque élément dans les tableaux:
foreachMessage { message in
print(message)
}
foreachMessage { message, type in
print(message, type)
}
Sainte vache, cela semble être une overcilleuse absolue
@Linusgeffarth puis saint c'est. Qu'est-ce qui suit de ça?
Idk, il semble que OP serait ok avec juste faire let messages = épinglé + normal code>.
@LinusgeFFUTH Les matrices de concaténation ne sont pas toujours la meilleure solution. Cette solution est meilleure en termes de performances et d'empreinte mémoire, en particulier si message code> contiendrait de grandes quantités de données, telles que des images (s) et un texte long.
Vous pouvez créer un seul tableau avec des messages épinglés et normaux ajoutés consécutivement et utilisez si vous le faites dans firstindex (où:) code> méthode sur collections code> Pour obtenir le premier index du message normal uiviewcontroller code> peut utiliser cartette code> observateur sur le SORTEDARRAY CODE> Pour définir le firstindex code> du message normal p>
Donc, vous voulez les utiliser épinglé un, puis non épinglé .. et ainsi de suite?
Quel est votre objectif avec ces tableaux de message? Vous pouvez créer une propriété calculée dans
globallarray code> qui les concaténate et les renvoient:varmessages: [Message] {Retour PinnedMessages + NormalMessages} Code>@ 7BEBMRTO OUI. Je montre toujours l'épinglé d'abord que ceux normaux