0
votes

Structure de données pour une matrice consécutive à Swift

J'ai deux tableaux, qui sont utilisés consécutivement.

GlobalArray.sort { $0.isPinned && !$1.isPinned }


3 commentaires

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 qui les concaténate et les renvoient: varmessages: [Message] {Retour PinnedMessages + NormalMessages}


@ 7BEBMRTO OUI. Je montre toujours l'épinglé d'abord que ceux normaux


3 Réponses :


0
votes

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)*/


0 commentaires

1
votes

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)
}


4 commentaires

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 .


@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 contiendrait de grandes quantités de données, telles que des images (s) et un texte long.



0
votes

Vous pouvez créer un seul tableau avec des messages épinglés et normaux ajoutés consécutivement et utilisez SWIFT 4.2 firstindex (où:) méthode sur collections Pour obtenir le premier index du message normal xxx

si vous le faites dans uiviewcontroller peut utiliser cartette observateur sur le SORTEDARRAY Pour définir le firstindex du message normal xxx


0 commentaires