J'essaie de filtrer un tableau d'objets qui forment essentiellement un graphe arborescent. ce que je veux faire est de filtrer tous les objets de ce tableau dont la propriété visible est NO, ou si sa propriété visible parent/grandparent/etc est vraie (les objets enfants peuvent avoir la propriété visible YES alors que son parent peut être NO). Je ne comprends pas comment j'utiliserais la syntaxe NSPredicate pour continuer à chercher le nœud parent jusqu'à ce qu'il n'y ait plus de parents ou que la propriété visible soit trouvée. Y a-t-il un moyen de s'y prendre?Un NSPredicate qui peut parcourir récursivement un graphe d'objet?
Répondre
Son depuis un certain temps j'ai posé cette question, et je pense que je suis allé dans une autre direction avec ce que je faisais, mais il y a des possibilités que je me rends compte maintenant pour résoudre ce que je voulais à l'époque:
- Avoir la méthode de propriété visible se comporter récursivement au lieu de faire le prédicat de format faire cela. Cela pourrait se faire comme ceci:
- (BOOL) isVisible { return visible && [parent isVisible]; } //... id filtered = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"visible == YES"]];
- Utiliser le bloc prédicats au lieu du format prédicats pour faire le traversal récursive:
[array filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { id obj = evaluatedObject; while (obj) { if (![obj isVisible]) return NO; obj = [obj parent]; } return YES; }]];
Ou une combinaison de les deux (ce qui serait le plus robuste et lisible je pense).
Je ne suis pas sûr que ce que vous cherchez à faire est possible avec un seul prédicat simple. Si c'est un arbre et que vous utilisez un prédicat pour obtenir les noeuds, vous voudrez et écrivez une méthode qui ira vers le haut et retournera un BOOL indiquant s'il doit être supprimé ou non.
Puis, juste obtenir vos nœuds et les mettre dans un NSMutableArray et faire un
for (int i = 0; i < [results count]; i++)
{
if ([self shouldBeRemoved:[results objectAtIndex:i]])
{
[results removeObjectAtIndex:i];
i--;
}
}
Votre shouldBeRemoved: méthode devrait être assez une méthode récursive simple.
- 1. Comment parcourir XPath récursivement?
- 2. La bibliothèque de graphes Jung2 peut-elle parcourir un digramme?
- 3. Script shell pour parcourir les fichiers récursivement
- 4. Script shell pour parcourir récursivement un répertoire et remplacer une chaîne
- 5. Comment puis-je parcourir récursivement tout le contenu d'IIS?
- 6. Comment sérialiser un objet NSPredicate?
- 7. Transposition sur un graphe orienté
- 8. Traverser un graphe Vs Traverser un arbre
- 9. NSPredicate qui est l'équivalent de SQL LIKE
- 10. Iphone: NSPredicate afin de vérifier un identifiant
- 11. C# SelectSingleNode - Peut-il être utilisé récursivement?
- 12. Est-ce qu'un NSPredicate peut rechercher un objet dans un tableau appartenant à un objet dans un autre tableau?
- 13. PHP Besoin d'inverser récursivement un tableau
- 14. Extraire un sous-graphe d'un graphe en utilisant JUNG?
- 15. algorithme pour un problème de graphe orienté
- 16. Construction d'un NSPredicate pour un filtre
- 17. Comment ajouter une conjonction à un NSPredicate
- 18. Comment transformer un graphe très cyclique non orienté en un graphe acyclique orienté?
- 19. Un moyen efficace de calculer récursivement l'arbre dominateur?
- 20. Recherche d'une clé dans un tableau, récursivement
- 21. Est-ce que Bonjour peut parcourir un service avec un nom particulier?
- 22. Comment parcourir dans un DataTable
- 23. Python: générer un graphe pour un réseau social
- 24. Algorithme pour trouver un trou dans un graphe unidimensionnel infini
- 25. Coulée vers un type récursivement borné
- 26. NSPredicate d'exclure NSManagedObjects qui ne sont pas enregistrés dans un NSFetchedResultsController
- 27. couplage maximum dans un graphe biparti
- 28. Comparaison d'un graphe linéaire généré par l'utilisateur avec un graphe généré aléatoirement par un programme
- 29. Comment modéliser un graphe déroulant dans WPF?
- 30. PostgreSQL Requête SQL ou PL/pgSQL pour parcourir un graphe orienté et retourner toutes les arêtes trouvées