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

  • gritsch schrieb:

    Amin Negm-Awad schrieb:

    der__flo schrieb:

    hallo,

    Ich habe ein NSArray, mit eine vielzahl von Orten. Jedoch sind manche doppelt.

    Kann mir jemand weiterhelfen, wie ich es schaffe alle doppelten zu löschen um jeden Ort nur mehr einmal anzuzeigen?

    Verwende NSOrderedSet.


    er braucht/will ja keine bestimmte sortierung also reicht ihm NSSet

    Außerdem um zu vermeiden was in letzter zeit einigen zum verhängnis wurde: Available in OS X v10.7 and later.

    Er will vorher unbedingt ein Array und nachher wiederunbedingt ein Array. Er will aber keine doppelten Einträge: Ordered-Sets.

    Wenn er /nie/ ein Array braucht, sein OP sagt aber etwas anderes, dann kann und sollte er /immer/ NSSet verwenden.

    Von einem Array in ein Set umzuwandeln, um das dann aber wieder in ein Array umzuwandeln, wie es hier empfohlen wurde, ist aber gewiss Quatsch.

    +++

    BTW: Kannst du die einige nennen?
    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"?
  • Amin Negm-Awad schrieb:

    Von einem Array in ein Set umzuwandeln, um das dann aber wieder in ein Array umzuwandeln, wie es hier empfohlen wurde, ist aber gewiss Quatsch.


    Das hat was von "...von Hinten durch die Brust ins Auge schießen...", ist IMO auch Quatsch aber wenns schön macht ;):D

    Viel interessanter wäre doch zu erfahren, warum es erst dazu kommt, dass Objekte doppelt im Array landen wenn man sie da nicht doppelt drin haben will. Bevor man ein Objekt ins Array packt könnte man doch mal prüfen ob das Objekt nicht schon im Array ist ;)
    [self setSignature:null];
    [[self postCount] increment];
  • Mike schrieb:

    Amin Negm-Awad schrieb:

    Von einem Array in ein Set umzuwandeln, um das dann aber wieder in ein Array umzuwandeln, wie es hier empfohlen wurde, ist aber gewiss Quatsch.


    Das hat was von "...von Hinten durch die Brust ins Auge schießen...", ist IMO auch Quatsch aber wenns schön macht ;):D

    Viel interessanter wäre doch zu erfahren, warum es erst dazu kommt, dass Objekte doppelt im Array landen wenn man sie da nicht doppelt drin haben will. Bevor man ein Objekt ins Array packt könnte man doch mal prüfen ob das Objekt nicht schon im Array ist ;)

    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.
    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"?
  • Mike schrieb:

    Amin Negm-Awad schrieb:

    Von einem Array in ein Set umzuwandeln, um das dann aber wieder in ein Array umzuwandeln, wie es hier empfohlen wurde, ist aber gewiss Quatsch.


    Das hat was von "...von Hinten durch die Brust ins Auge schießen...", ist IMO auch Quatsch aber wenns schön macht ;):D

    Viel interessanter wäre doch zu erfahren, warum es erst dazu kommt, dass Objekte doppelt im Array landen wenn man sie da nicht doppelt drin haben will. Bevor man ein Objekt ins Array packt könnte man doch mal prüfen ob das Objekt nicht schon im Array ist ;)

    Also ich habe eine Datenbank mit einer vielzahl von Betrieben. Und zu jedem auch ein paar Informationen wie eben zum Beispiel den Ort.
    Und jetzt möchte ich anzeigen, welche Orte es überhaupt gibt. Und da es in einem Ort mehrere Betriebe gibt sind die Orte dan eben auch doppelt.
    Deshalb möchte ich das Array "reinigen" das jeder Ort nur einmal drinnen steht.
  • Stichwort: Normalisierung.
    Entweder du baust dir eine eigene Datenbanktabelle 'Orte' und referenzierst auf die _id des Ortes, oder du baust dir eine eigene Entity 'Orte' und referenzierst auf den Ort.
    Später kannst du dann sogar eine n:m Beziehung erstellen, wenn einer der Betriebe beispielsweise in Hamburg, Berlin und München ansässig ist.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • 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.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P

  • Jetzt sollte der Link auch klappen. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • 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.
    „Meine Komplikation hatte eine Komplikation.“
  • der__flo schrieb:

    Mike schrieb:

    Amin Negm-Awad schrieb:

    Von einem Array in ein Set umzuwandeln, um das dann aber wieder in ein Array umzuwandeln, wie es hier empfohlen wurde, ist aber gewiss Quatsch.


    Das hat was von "...von Hinten durch die Brust ins Auge schießen...", ist IMO auch Quatsch aber wenns schön macht ;):D

    Viel interessanter wäre doch zu erfahren, warum es erst dazu kommt, dass Objekte doppelt im Array landen wenn man sie da nicht doppelt drin haben will. Bevor man ein Objekt ins Array packt könnte man doch mal prüfen ob das Objekt nicht schon im Array ist ;)

    Also ich habe eine Datenbank mit einer vielzahl von Betrieben. Und zu jedem auch ein paar Informationen wie eben zum Beispiel den Ort.
    Und jetzt möchte ich anzeigen, welche Orte es überhaupt gibt. Und da es in einem Ort mehrere Betriebe gibt sind die Orte dan eben auch doppelt.
    Deshalb möchte ich das Array "reinigen" das jeder Ort nur einmal drinnen steht.

    Dann würde ich wohl ein zweites Array erstellen, dass nur die Orte enthält und nicht Objekte aus dem ursprünglichen Array löschen. Nehmen wir mal an, du hast Betrieb A und Betrieb K welche beide am selben Ort sind. Welchen Betrieb würdest du dann aus deinem Array löschen um den Ort nicht doppelt im Array zu haben? Betrieb A? Was passiert aber dann wenn du dich danach für Betrieb A interessierst? Oder du dich nur fragst wieviele Betriebe es am Ort BZ gibt? ;)
    [self setSignature:null];
    [[self postCount] increment];
  • 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 handelt sich um eine JSON-Datenkbank, das heißt die Möglichkeit kann ich leider nicht nutzen.
  • 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...

    Postleitzahl und Ort bilden doch eine Einheit, gehören also in eine Tabelle.
    (Man muss ja nicht totnormalisieren. Auch wenn Berlin, Hamburg und Bremen jeweils gefühlt 800 Postleitzahlen haben, kann man den Ort im Klartext dahinter setzen. Dass Berlin irgendwann mal umbenannt wird halte ich für unwahrscheinlich. Obwohl... "10965 - Flughäfen werden überbewertet"...)

    JSON ist doch keine Datenbank, sondern ein Objektmodell... Das heißt, du kannst nach Erhalt der Daten direkt ein (Ordered)Set daraus generieren.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Mike schrieb:

    der__flo schrieb:

    Mike schrieb:

    Amin Negm-Awad schrieb:

    Von einem Array in ein Set umzuwandeln, um das dann aber wieder in ein Array umzuwandeln, wie es hier empfohlen wurde, ist aber gewiss Quatsch.


    Das hat was von "...von Hinten durch die Brust ins Auge schießen...", ist IMO auch Quatsch aber wenns schön macht ;):D

    Viel interessanter wäre doch zu erfahren, warum es erst dazu kommt, dass Objekte doppelt im Array landen wenn man sie da nicht doppelt drin haben will. Bevor man ein Objekt ins Array packt könnte man doch mal prüfen ob das Objekt nicht schon im Array ist ;)

    Also ich habe eine Datenbank mit einer vielzahl von Betrieben. Und zu jedem auch ein paar Informationen wie eben zum Beispiel den Ort.
    Und jetzt möchte ich anzeigen, welche Orte es überhaupt gibt. Und da es in einem Ort mehrere Betriebe gibt sind die Orte dan eben auch doppelt.
    Deshalb möchte ich das Array "reinigen" das jeder Ort nur einmal drinnen steht.

    Dann würde ich wohl ein zweites Array erstellen, dass nur die Orte enthält und nicht Objekte aus dem ursprünglichen Array löschen. Nehmen wir mal an, du hast Betrieb A und Betrieb K welche beide am selben Ort sind. Welchen Betrieb würdest du dann aus deinem Array löschen um den Ort nicht doppelt im Array zu haben? Betrieb A? Was passiert aber dann wenn du dich danach für Betrieb A interessierst? Oder du dich nur fragst wieviele Betriebe es am Ort BZ gibt? ;)

    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.
  • Lucas de Vil schrieb:

    Postleitzahl und Ort bilden doch eine Einheit, gehören also in eine Tabelle.

    Ich glaube aber auch nicht, dass Du von dieser Teilnormalisierung einen großen Vorteil hast. Eigentlich nur mehr Programmieraufwand.

    Lucas de Vil schrieb:

    (Man muss ja nicht totnormalisieren. Auch wenn Berlin, Hamburg und Bremen jeweils gefühlt 800 Postleitzahlen haben, kann man den Ort im Klartext dahinter setzen. Dass Berlin irgendwann mal umbenannt wird halte ich für unwahrscheinlich. Obwohl... "10965 - Flughäfen werden überbewertet"...)

    +lol+
    „Meine Komplikation hatte eine Komplikation.“