der__flo schrieb:
bin jetzt leider nicht bei meinem Mac. Aber werden dann meinen Code, wie ich es probiert habe posten.
doppelte Einträge aus NSArray
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
-
-
Lucas de Vil schrieb:
Amin Negm-Awad schrieb:
In der Tat, wenn er es nicht will, sollte sich das eigentlich schon so in der UI modellieren lassen. Bei einer Lotto-App sollte es ja auch unmöglich sein, zweimal dieselbe Zahl auszuwählen und nicht erst beim Übermitteln gelöscht werden.
Das wiederum ist simpel: gemischte Kopie des Arrays erstellen, ein zufälliges Objekt rausziehen und löschen, ein zufälliges Objekt rausziehen und löschen (das ganze dann noch vier Mal durchführen) und gut.
Da sich das Array ja kontinuierlich verändert kann man auch 6x die Ziffer an Position 0 herausziehen - es sind dennoch immer unterschiedliche Objekte.
Das verändert die UI?Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"? -
Lucas de Vil schrieb:
Das wiederum ist simpel: gemischte Kopie des Arrays erstellen, ein zufälliges Objekt rausziehen und löschen, ein zufälliges Objekt rausziehen und löschen (das ganze dann noch vier Mal durchführen) und gut.
Da sich das Array ja kontinuierlich verändert kann man auch 6x die Ziffer an Position 0 herausziehen - es sind dennoch immer unterschiedliche Objekte.
Wenn der Array schon permutiert ist, kann man auch einfach die ersten sechs Elemente nehmen - doppelt zufällig ist ja nicht besser ;-) -
macmoonshine schrieb:
Markus Müller schrieb:
Schau Dir mal was über Normalisierung an:
de.wikipedia.org/wiki/Normalisierung_(Datenbank)
Theoretisch ist das sicherlich möglich. In der Praxis werden aber Orte und Postleitzahlen ganz selten in eigenen Tabellen angelegt, weil das Handling einfach sehr komplex wird. Z. B. müsste für einen Nutzer, der einen neuen Ort eingibt, ein neuer Eintrag in der PLZ- und einer in der Ortstabelle gemacht werden. Schwierig wird es auch, wenn manche Nutzer den Ortsteil andere ihn wiederum nicht mit angeben...
@der__flo: Wenn Du eine (relationale) Datenbank hast, kannst Du doch auch eine Distinct- oder Group-By-Abfrage machen.
Es ist noch komplexer, weil Straßennamen und Hausnummern eine Rolle spielen. Aber derlei Daten werden ja nicht vom Benutzer angelegt und gepflegt, sondern fix und foxy in der App geliefert.Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"? -
der__flo schrieb:
…
Das hab ich bereits gemacht. Das heißt im Array stehen jetzt nur noch Orte.
Und welchen ich lösche ist egal, da ich darauch nicht mehr zugreifen muss.
Dann ist es genau das Problem, dass ich schon nannte: Wenn du im Array sowieso jeden Ort nur einmal drin haben willst warum schaust du dann nicht vorher, bevor du einen Ort darin speichern willst, mal ins Array rein ob der Ort nicht schon drin steckt?
Auch stellt sich hier dann die Frage warum du kein Set draus machen willst. Wäre IMO genau das Richtige für deinen Anwendungsfall. Ist, glaub ich, sogar einer der Klassiker womit ein Set in der Literatur beschrieben wird: Eine Liste von Objekten (hier also Orten). (bzw. das, was ein Set halt überhaupt ist: Eine Liste unterschiedlicher Objekte.)
Lies dir unbedingt mal den Collections Programming Guide durch. Dann wird es klarer. Das tolle an NSSet, NSArray, NSDictionary und co ist, dass die Instanzmethoden oft gleich/ähnlich sind. (klar, dass man in einem NSSet keine keys finden wird ;))[self setSignature:null];
[[self postCount] increment]; -
hat jemand einen codeausschnitt für mich?
hab das selbe problem, brings aber nicht auf die reihe -
Code wofür?[self setSignature:null];
[[self postCount] increment]; -
-
-
Kanns sein, dass in Zeile 3 nen s zuviel ist?[self setSignature:null];
[[self postCount] increment]; -
Zum einen das und zum anderen heißt es
newsSet allObjects -
habs jetzt so probiert:
jetzt kommt zwar kein fehler, aber funktionieren tuts auch nicht.
hab in meinem array immer noch machne orte doppelt -
Das ist ja auch kein Wunder, du nimmst ja nur die Objekte aber schaust nicht welcher Wert in den Objekten gespeichert ist. In einem NSSet erscheinen Objekte nicht doppelt aber wer hindert einen daran zwei Objekten (=zwei IDs) den gleichen Wert (Ortsnamen hier) mitzugeben? Sowas erkennt NSSet nicht, das musst du selbst prüfen.
Also entweder sorgst du dafür, dass für jeden Ort nur ein einziges Objekt erzeugt wird für news oder aber du prüfst ob der Ortsname, der dem Array hinzugefügt werden soll, schon existiert und reagierst dann entsprechend.[self setSignature:null];
[[self postCount] increment]; -
hast du das schon mal gemacht?
ich möchte mir die lange for-schleife sparen..
aber wenns nicht anders geht komm ich warscheinlich nicht drum rum. -
Doch, du kommst drumherum. Ein Set verwendet -isEqual: zur Überprüfung. Diese Methode musst du entsprechend überschreiben. Ich empfehle dir dann, insoweit die Objekte immutable zu machen, weil das die Sache erleichtert.Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"? -
ok, vielleicht probier ich's doch mit der schleife^^
-
appdeveloper schrieb:
hast du das schon mal gemacht?
ich möchte mir die lange for-schleife sparen..
aber wenns nicht anders geht komm ich warscheinlich nicht drum rum.
Ja aber was hilft es dir? Ne For-Schleife zu basteln ist ja nun nicht die Herausforderung.[self setSignature:null];
[[self postCount] increment]; -
-
1. Du vergleichst Objekte mit ==. Das führt zu einem Vergleich auf Identität nicht auf Gleichheit. Dazu musst du isEqual…: nehmen.
2. Du kannst aus einem Array mit Entitäten ein Array mit bestimmten Eigenschaften der Entität über KVC machen:
NSArray *cityAttribute = [cities valueForKey:@"city"];
3. Welche einführende Literatur benutzt du?Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"? -
appdeveloper schrieb:
newsOrte = [news [objectForKey:@"Ort"]]; //wie kann ich aus dem array nur "Ort" nehmen?
Wie ist denn dein Objekt "news" aufgebaut?[self setSignature:null];
[[self postCount] increment];