8
votes

Générer des permutations d'éléments Nsarray

Disons que j'ai un nsarray de nsnumbers comme celui-ci: 1, 2, 3

Ensuite, l'ensemble de toutes les permutations possibles ressemblerait à ceci comme suit:

1, 2, 3

1, 3, 2

2, 1, 3

2, 3, 1

3, 1, 2

3, 2, 1

Qu'est-ce qu'un bon moyen de le faire dans Objective-C?


0 commentaires

5 Réponses :


5
votes

Il pourrait y avoir une meilleure façon de le faire (sur place ou quelque chose), mais cela semble fonctionner:

en-tête: xxx

implémentation: < / p> xxx

pour l'utiliser, tout simplement #import le fichier d'en-tête et appelez [Yourarray Allpermutations] ; La méthode renvoie une matrice contenant des matrices pour chaque permutation.

[code adapté du code PHP ici .]


6 commentaires

Qu'est-ce que le nom des fichiers H et M doit être?


Tout ce que vous voulez qu'ils soient; Il n'y a pas d'exigence. Assurez-vous simplement qu'ils sont dans votre répertoire de projet (ou quelque part, votre projet recherche des fichiers à compiler).


Il y a une petite fuite dans votre code: vous devez libérer (Perm) avant de revenir de la méthode Allpermutations.


Avait d'autres problèmes avec votre code: les deux boucles de PC_Next_permutation n'avaient aucune condition de fin valide. Pour mieux comprendre, j'ai également renommé les noms de variables et posté le code corrigé dans une nouvelle réponse ci-dessous.


Fuite de mémoire - Comme indiqué par @pelogon + Sigabrt, lorsqu'il est exécuté. J'ai utilisé la solution de Pelogon.


Hah; Je ne me souviens même pas d'écrire cela. Je ne sais pas pourquoi je ne l'ai pas vété en premier. J'avais réécrit beaucoup différemment, maintenant ...



8
votes

J'ai utilisé le code de la réponse de Wevah ci-dessus et j'ai découvert quelques problèmes avec cela, voici ici mes modifications pour que cela fonctionne correctement:

nsarray + permutation.h xxx p> nsarray + permutation.m xxx


1 commentaires

Grandes solutions! Merci.



5
votes

Vous pouvez modifier nstring * caractères vers id quelque chose et l'utiliser pour tout type d'objet xxx


1 commentaires

meilleure réponse ive vu jusqu'à présent. J'ai apporté des changements afin qu'il fonctionne avec n'importe quel type non seulement nstring



2
votes

Réponse de SSJ expansée à

-Log imprime pour clarté

- -work avec n'importe quel objet

-Proplications d'explications

-Cover Effections d'Erreur peut résulter xxx

sortie du journal pour entrée @ [@ 1, @ 2, @ 3] xxx


1 commentaires

Cela semble échouer pour moi lorsque le tableau a deux des mêmes chiffres.



3
votes

Je suis récemment tombé sur le même problème et j'ai écrit une solution récursive que je crois est plus lisible. Il repose sur le principal principal qui est noté ici . J'y incluais ici au cas où cela aidera quelqu'un: xxx

exemple d'appel: xxx

résultat:

1, 2, 3

1, 3, 2

2, 1, 3

2, 3, 1

3, 1, 2

3, 2, 1


0 commentaires