Swift 3: Tableau de Dictionnaire?
J'ai un grand tableau et la nécessité d'y accéder par une clé (une recherche) j'ai donc besoin de créer le Dictionnaire. Est-il construit en fonction de Swift 3.0 de le faire, ou dois-je l'écrire moi-même?
D'abord, j'ai besoin d'elle pour une classe avec la touche "Chaîne" et, plus tard, peut-être que je vais être capable d'écrire une version de modèle pour usage général (tous les types de données et les clés).
Dans la gamme, vous avez uniquement les valeurs de dictionnaire vous avez de la valeur de clé. Quelles clés ?
Comment avez-vous se retrouver avec un tableau en premier lieu? Si il y a un format strict avec des éléments qui peuvent être utilisés comme clés, il ne devrait pas être trop dur. Pourriez-vous peut-être nous montrer un morceau de la matrice?
Je pense que j'ai besoin d'une clôture, qui fournit la clé, par exemple un membre de la classe. Pour faire simple ma première tentative serait une des clés de la chaîne.
So I need to create Dictionary
Mais quelles seraient les clés?Comment avez-vous se retrouver avec un tableau en premier lieu? Si il y a un format strict avec des éléments qui peuvent être utilisés comme clés, il ne devrait pas être trop dur. Pourriez-vous peut-être nous montrer un morceau de la matrice?
Je pense que j'ai besoin d'une clôture, qui fournit la clé, par exemple un membre de la classe. Pour faire simple ma première tentative serait une des clés de la chaîne.
OriginalL'auteur Peter71 | 2016-09-30
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes à la recherche de quelque chose comme ceci:
Vous pouvez désormais le faire:
Si vous souhaitez que votre code pour être plus général, on pourrait même ajouter cette extension sur
Sequence
au lieu deArray
:Ne noter que ce qui provoque la Séquence à être itéré et pourrait avoir des effets secondaires dans certains cas.
J'ai ajouté un peu d'une démonstration sur la façon de l'utiliser, n'hésitez pas à poser des questions si vous êtes coincé sur quelque chose.
Merci beaucoup. Je pense que je l'ai eu. Maintenant je vais tester la façon dont il est rapide. Mais quels sont les effets secondaires???
certaines Séquences ne peuvent être répétées plus d'une fois, pour plus d'informations, découvrez la documentation d'Apple de la Séquence. Sauf si votre groupe est énorme, la performance ne devrait pas être un problème. Et il sera difficile de battre une bonne vieille boucle (et dans ce cas, je pense que la version avec les réduire n'est pas particulièrement élégant de toute façon).
Tableau est grand (plus de 20 000 éléments), mais toute autre manière est lent, alors je vais lui donner un essai. Et qui .réduire n'est pas optimale, je croirai en vous. 🙂 Je n'ai pas de metier.
OriginalL'auteur
Sur Swift 4, vous pouvez atteindre cet objectif en utilisant du Dictionnaire
grouping:by:
initialiseurPar ex:
Vous disposez de classe nommée Un
Ensuite, vous avez un tableau d'objets de type Un
Disons que vous voulez créer un Dictionnaire par le regroupement de tous les noms par leur première lettre. Vous utilisez les Martinets
Dictionary(grouping:by:)
pour atteindre cetsource
Réponse Parfaite.
OriginalL'auteur
Est qu'il (Swift 4)?
Cela donne une erreur de clé en double.
OriginalL'auteur
Que les autres ont déjà dit, nous avons besoin de comprendre qui sont les clés.
Cependant je suis en train d'essayer d'apporter une solution à mon interprétation de votre question.
Maintenant
dict
est un dictionnaire où l'key
est leuser id
et lavalue
est leuser value
.À l'accès d'un utilisateur par l'intermédiaire de son
id
vous pouvez maintenant simplement écrireMise à jour #1: approche Générale
Donné un tableau d'un type donné
Element
, et une fermeture de déterminer lakey
d'unElement
, la suivante de la fonction générique va générer unDictionary
de type[Key:Element]
Exemple
Mise à jour #2
Comme l'a noté Martin R la réduire permettra de créer un nouveau dictionnaire pour chaque itération de la fermeture. Cela pourrait conduire à une consommation de mémoire.
Voici une autre version de la
createIndex
fonction où l'espace est en O(n) où n est la longueur des ormes.Notez que cela crée un nouveau dictionnaire dans chaque étape de l'itération, il pourrait ne pas être le plus performant solution pour les grands tableaux. – Voir airspeedvelocity.net/2015/08/03/... pour quelques réflexions sur l'utilisation de
reduce
pour la cartographie des opérations.J'ai ajouté dans
Update#1
le général de la fonction que vous avez demandé.Vous avez raison; j'ai ajouté dans
Update#2
une approche plus classique avec un Espace de Complexité O(n). Je vous remercie.Merci à toi aussi. Il ressemble un peu similaire à overactors solution, donc je pense que nous avons atteint le un code optimal des deux côtés. Super!
OriginalL'auteur
Cette extension fonctionne pour toutes les séquences (y compris les tableaux) et vous permet de sélectionner à la fois clé et la valeur:
Exemple:
OriginalL'auteur
Juste de le faire simplement,
reduce
n'est pas très approprié,OriginalL'auteur
Si je comprends bien vous êtes à la question que vous souhaitez convertir à
Array
àDictionary
.Dans mon cas, j'ai créer
extension
pour laArray
et les clés du dictionnaire index de laArray
.Exemple:
OriginalL'auteur
Le suivant convertit un tableau d'un dictionnaire.
OriginalL'auteur