NSArray mit NSString vergleichen?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSArray mit NSString vergleichen?

    Hallo liebe Community!
    Ich arbeite momentan an einem privaten Projekt,
    wo ich einen String (welcher sich ändert) mit allen Objekten aus einem Array vergleiche (welches sich ändert)

    Ich habe ein Beispiel wie ich das mit mit einem String mache, weil meine andren Beispiele nicht funktionieren (die mit Arrays :/)


    Ich würde gerne wissen, wie ich einen String mit einem Array vergleiche, um zu sehen ob der String im Array enthalten ist.

    Quellcode

    1. if([@"@%",mystring isEqualToString:@"hallo"])


    Die Variable mystring wird durch
    die Eingabe definiert:

    Quellcode

    1. NSString *mystring = [theTextField stringValue];


    Aber ich denke nicht dass ihr das benötigt.

    Tut mir leid wenn das eine ziemliche Noobfrage ist,
    aber ich mache das als Hobby und habe noch währenddessen Schule :)
    Also seit mir bitte nicht böse!

    Mit freundlichen Grüssen,

    Joluc

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von joluc ()

  • Das wird aber nicht funktionieren, da [theTextField stringValue] als Objekt sicher nicht im Array ist.
    Da bleibt also nur die Möglichkeit, jedes Element durchzugehen.

    Quellcode

    1. for (id myString in myArray) {
    2. if ([[myString stringValue] isEqualToString:[theTextField stringValue]]) {
    3. //JA
    4. }
    5. }

  • Kay schrieb:

    marceo schrieb:

    zB über containsObject:


    Ich bin mir nicht sicher, ob containsObject hier das richtige ist. containsObject prüft ja nur, ob ein identisches Objekt im Array liegt und prüft keine Zeichenfolge oder?


    Dachte ich auch immer, habe es deshalb mal gerade getestet und es funktioniert.

    Quellcode

    1. self.theArray = @[@"hallo", @"du", @"wie", @"gehts"];
    2. if ([self.theArray containsObject:@"gehts"])
    3. {
    4. NSLog(@"contains object");
    5. }
    Alles anzeigen



    BTW: Wie macht ihr das Xcode-Syntaxhighlighting?

    Edit 2: Jetz gings automatisch ^^
  • Kay schrieb:

    marceo schrieb:

    zB über containsObject:


    Ich bin mir nicht sicher, ob containsObject hier das richtige ist. containsObject prüft ja nur, ob ein identisches Objekt im Array liegt und prüft keine Zeichenfolge oder?

    This method determines whether anObject is present in the array by sending an isEqual: message to each of the array’s objects (and passing anObject as the parameter to each isEqual: message).

    Chris
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • matz schrieb:

    Kay schrieb:

    marceo schrieb:

    zB über containsObject:


    Ich bin mir nicht sicher, ob containsObject hier das richtige ist. containsObject prüft ja nur, ob ein identisches Objekt im Array liegt und prüft keine Zeichenfolge oder?


    Dachte ich auch immer, habe es deshalb mal gerade getestet und es funktioniert.

    Quellcode

    1. self.theArray = @[@"hallo", @"du", @"wie", @"gehts"];
    2. if ([self.theArray containsObject:@"gehts"])
    3. {
    4. NSLog(@"contains object");
    5. }
    Alles anzeigen



    BTW: Wie macht ihr das Xcode-Syntaxhighlighting?

    Edit 2: Jetz gings automatisch ^^


    Es geht aber nur, weil Dein Bsp. eigentlich keine "echten" NSString Objekte enthält... containsObject: mit einem Wert von nem Textfeld wird so nicht gehen!

    Volker
  • matz schrieb:

    Kay schrieb:

    marceo schrieb:

    zB über containsObject:


    Ich bin mir nicht sicher, ob containsObject hier das richtige ist. containsObject prüft ja nur, ob ein identisches Objekt im Array liegt und prüft keine Zeichenfolge oder?


    Dachte ich auch immer, habe es deshalb mal gerade getestet und es funktioniert.

    Quellcode

    1. self.theArray = @[@"hallo", @"du", @"wie", @"gehts"];
    2. if ([self.theArray containsObject:@"gehts"])
    3. {
    4. NSLog(@"contains object");
    5. }
    Alles anzeigen



    BTW: Wie macht ihr das Xcode-Syntaxhighlighting?

    Edit 2: Jetz gings automatisch ^^


    warum vermutet ihr solche sachen?
    lest doch einfach in der doku was bei der entsprechenden methode steht.

    und wenn man etwas testet, dann bitte auch korrekt, denn in deinem fall hast du bei beiden strings die gleiche adresse.
    folglich würde auch indexOfObjectIdenticalTo funktionieren das genau das verhaltet aufweist das ihr komischerweise dem containsObject zugeschrieben hat (es vergleicht nur die adresse der objekte).
  • volker schrieb:

    matz schrieb:

    Kay schrieb:

    marceo schrieb:

    zB über containsObject:


    Ich bin mir nicht sicher, ob containsObject hier das richtige ist. containsObject prüft ja nur, ob ein identisches Objekt im Array liegt und prüft keine Zeichenfolge oder?


    Dachte ich auch immer, habe es deshalb mal gerade getestet und es funktioniert.

    Quellcode

    1. self.theArray = @[@"hallo", @"du", @"wie", @"gehts"];
    2. if ([self.theArray containsObject:@"gehts"])
    3. {
    4. NSLog(@"contains object");
    5. }
    Alles anzeigen



    BTW: Wie macht ihr das Xcode-Syntaxhighlighting?

    Edit 2: Jetz gings automatisch ^^


    Es geht aber nur, weil Dein Bsp. eigentlich keine "echten" NSString Objekte enthält... containsObject: mit einem Wert von nem Textfeld wird so nicht gehen!

    Volker


    1. was ist denn ein "nicht echtes" string objekt? klar sind das echte objekte, nur weil sie die gleiche adresse haben (weils eben ein immutable string ist und man diese nicht doppelt im speicher braucht.

    2. klar funktionierrt containsObject auch in dem fall in dem die beiden strings nicht die gleichen adressen haben (einfach doku lesen...)
  • volker schrieb:

    Was macht den der Compiler wenn man einen String wie im obigen Bsp. definiert... ... ... nur in diesem Fall funktioniert containsObject: ...


    Lg, Volker


    du bekommst ein normales immutable string objekt - was sonst?

    und nein, das funktioniert auch wenn die strings nicht die gleiche adresse haben (doku lesten). kannst du ja auch testen indem du den string per format zusammenstellst oder eben einen mutablestring verwendest.
  • volker schrieb:

    Was macht den der Compiler wenn man einen String wie im obigen Bsp. definiert... ... ... nur in diesem Fall funktioniert containsObject: ...

    "nicht echtes" Objekt ist ein flacher Ausdruck, natürlich ein echtes Objekt, aber durch den Compiler immer das selbe, egal wo definiert. Ist halt der Sonderfall bei literals....

    stackoverflow.com/questions/25…tant-and-a-string-literal


    Lg, Volker

    1. Nein, es ist scheißegal, ob es ein Literal ist oder sonstwoher kommt, es wird immer isEqual: genommen. Und das funktioniert auch immer.
    2. Dass früher ein identisches Objekt irgendwie so etwas ähnliches wie garantiert wurde, lässt nicht gar keinen Rückschluss auf gar nix zu. Merke: Aus Identität folgt Gleichheit, aber aus Gleichheit folgt keine Identität.
    3. Aber auch egal, weil mittlerweile das Gegenteil explizit dokumentiert ist:
    Objects created using the literal or boxed expression syntax are not guaranteed to be uniqued by the runtime, but nor are they guaranteed to be newly-allocated. As such, the result of performing direct comparisons against the location of an object literal (using ==, !=, <, <=, >, or >=) is not well-defined. This is usually a simple mistake in code that intended to call the isEqual: method (or the compare: method).

    This caveat applies to compile-time string literals as well. Historically, string literals (using the @"..." syntax) have been uniqued across translation units during linking. This is an implementation detail of the compiler and should not be relied upon. If you are using such code, please use global string constants instead (NSString *const MyConst = @"...") or use isEqual:.

    Mal abgesehen davon, dass man sich niemals einfach auf SO verlassen sollte, sollte man sich ganz bestimmt nicht auf Antworten aus dem Jahre 2008 verlassen.

    Noch zu 2.: Gilt natürlich nicht für nil.
    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"?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Amin Negm-Awad ()