Array durchsuchen

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

  • Entweder mit händischem Iterieren durch das Array und vergleichen des jeweiligen Elementes - gut zum Lernen. Oder eleganter mittels NSPredicate, in dem Du die Auswahlkriterien definierst und ein Ergebnis-Array bekommst. Und sicher gibt es noch andere Lösungswege...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • manoh schrieb:

    Nee, das ist nicht kompliziert.

    Sebi89 schrieb:

    und dann dazu die daten laden kann
    Die Daten sind ja schon im Speicher. Da wird nix geladen. Du kannst den Index oder das Element selber bekommen. Oder entfernen oder... Siehe dazu die Dokumentation von Array an. Schau dir besonders die Sektion Finding Elements an.
    ich glaub du verstehst mich falsch. ich hab ja objecte erstellt und sie mit werten versehen und dann ins Array gepackt wie den String "Bisasam". ich möchte das der Nutzer nach den Strings suchen kann und dann alles dazu bekommt. brauche also dazu den index wo sich das befindet damit ich diese Infos dann laden kann für den Nutzer
  • Michael schrieb:

    Sebi89 schrieb:

    ich glaub du verstehst mich falsch.
    Nein, er versteht dich schon richtig. Array bietet dir Methoden an, um genau deinen Anwendungsfall zu lösen. Schau dir, wie dir gesagt wurde, die Dokumentation von Array an. Beachte vor allem den letzten Satz von manoh.
    hab ich aber ich weis nicht wie ich das umsetzen soll. Hier ist mal ein Object von mir und dazu will ich den index haben wenn ich nach dem Namen suche

    Quellcode

    1. let pokeObject1 = Pokemon()
    2. pokeObject1.pokemonName = "Bisasam"
    3. pokeObject1.pokedexNummer = "# 001"
    4. pokeObject1.beschreibung = "Dieses Pokémon trägt von Geburt an einen Samen auf dem Rücken, der mit ihm keimt und wächst."
    5. pokeObject1.typ = "Typ: Pflanze, Gift"
    6. pokeObject1.groeße = "Größe: 0,7 m"
    7. pokeObject1.gewicht = "Gewicht: 6,9 Kg"
    8. pokeObject1.bild = UIImage(named: "Bisasam")!
  • Beispiel aus der Doku etwas abgeändert:


    Quellcode

    1. /* Playground */
    2. import Foundation
    3. struct Elem {
    4. var a: String
    5. var b: Int
    6. }
    7. var arr = [Elem]()
    8. arr.append(Elem(a: "one", b: 1))
    9. arr.append(Elem(a: "two", b: 2))
    10. if let e = arr.first(where: { $0.a == "one"}) {
    11. print("\(e.a) - \(e.b)")
    12. } else {
    13. print("nothing found")
    14. }
    Alles anzeigen
    firstIndex() geht ähnlich.

    Neben einem Array gibt es auch ein Set oder Dictionary. Du muss gucken, vllt. passt eins davon sogar besser als dein Array.
  • edit: hier habt ihr mal den ganzen code

    Quellcode

    1. import UIKit
    2. class ViewController: UIViewController, ChangeNameDelegate {
    3. // MARK: - ViewDidLoad
    4. override func viewDidLoad() {
    5. super.viewDidLoad()
    6. setupLabel()
    7. createPokeObject()
    8. namenLabel.text = pokeItem[indexNummer].pokemonName
    9. nummerLabel.text = pokeItem[indexNummer].pokedexNummer
    10. beschreibungsLabel.text = pokeItem[indexNummer].beschreibung
    11. typLabel.text = pokeItem[indexNummer].typ
    12. groeßeLabel.text = pokeItem[indexNummer].groeße
    13. gewichtLabel.text = pokeItem[indexNummer].gewicht
    14. pokemonImageView.image = pokeItem[indexNummer].bild
    15. }
    16. // MARK: - Outlets und Variabeln
    17. @IBOutlet weak var namenLabel: UILabel!
    18. @IBOutlet weak var nummerLabel: UILabel!
    19. @IBOutlet weak var beschreibungsLabel: UILabel!
    20. @IBOutlet weak var typLabel: UILabel!
    21. @IBOutlet weak var groeßeLabel: UILabel!
    22. @IBOutlet weak var gewichtLabel: UILabel!
    23. @IBOutlet weak var weiterOutlet: UIButton!
    24. @IBOutlet weak var zurueckOutlet: UIButton!
    25. @IBOutlet weak var pokemonImageView: UIImageView!
    26. var pokeItem = [Pokemon]()
    27. var indexNummer = 0
    28. // MARK: - Button Methodem
    29. @IBAction func weiterButton(_ sender: UIButton) {
    30. if indexNummer < pokeItem.count - 1 {
    31. indexNummer += 1
    32. }
    33. namenLabel.text = pokeItem[indexNummer].pokemonName
    34. nummerLabel.text = pokeItem[indexNummer].pokedexNummer
    35. beschreibungsLabel.text = pokeItem[indexNummer].beschreibung
    36. typLabel.text = pokeItem[indexNummer].typ
    37. groeßeLabel.text = pokeItem[indexNummer].groeße
    38. gewichtLabel.text = pokeItem[indexNummer].gewicht
    39. pokemonImageView.image = pokeItem[indexNummer].bild
    40. //print(indexNummer)
    41. }
    42. @IBAction func zurueckButton(_ sender: UIButton) {
    43. if indexNummer <= pokeItem.count - 1 {
    44. indexNummer -= 1
    45. }
    46. if indexNummer <= 0 {
    47. indexNummer = 0
    48. }
    49. namenLabel.text = pokeItem[indexNummer].pokemonName
    50. nummerLabel.text = pokeItem[indexNummer].pokedexNummer
    51. beschreibungsLabel.text = pokeItem[indexNummer].beschreibung
    52. typLabel.text = pokeItem[indexNummer].typ
    53. groeßeLabel.text = pokeItem[indexNummer].groeße
    54. gewichtLabel.text = pokeItem[indexNummer].gewicht
    55. pokemonImageView.image = pokeItem[indexNummer].bild
    56. //print(indexNummer)
    57. }
    58. @IBAction func searchButton(_ sender: UIButton) {
    59. performSegue(withIdentifier: "showSearchController", sender: nil)
    60. }
    61. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    62. if segue.identifier == "showSearchController" {
    63. let destVC = segue.destination as! SearchViewController
    64. destVC.delegate = self
    65. }
    66. }
    67. // MARK: - Funktionen
    68. func searchNameFromUser(name: String) {
    69. }
    70. // MARK: - Pokemon Objecte
    71. func createPokeObject() {
    72. let pokeObject1 = Pokemon()
    73. pokeObject1.pokemonName = "Bisasam"
    74. pokeObject1.pokedexNummer = "# 001"
    75. pokeObject1.beschreibung = "Dieses Pokémon trägt von Geburt an einen Samen auf dem Rücken, der mit ihm keimt und wächst."
    76. pokeObject1.typ = "Typ: Pflanze, Gift"
    77. pokeObject1.groeße = "Größe: 0,7 m"
    78. pokeObject1.gewicht = "Gewicht: 6,9 Kg"
    79. pokeObject1.bild = UIImage(named: "Bisasam")!
    80. let pokeObject2 = Pokemon()
    81. pokeObject2.pokemonName = "Bisaknosp"
    82. pokeObject2.pokedexNummer = "# 002"
    83. pokeObject2.typ = "Typ: Pflanze, Gift"
    84. pokeObject2.groeße = "Größe: 1 m"
    85. pokeObject2.gewicht = "Gewicht: 13 Kg"
    86. pokeObject2.beschreibung = "Sobald die Knospe auf seinem Rücken aufgeht, kann BISAKNOSP nicht mehr auf zwei Beinen stehen."
    87. pokeObject2.bild = UIImage(named: "Bisaknosp")!
    88. let pokeObject3 = Pokemon()
    89. pokeObject3.pokemonName = "Bisaflor"
    90. pokeObject3.pokedexNummer = "# 003"
    91. pokeObject3.typ = "Typ: Pflanze, Gift"
    92. pokeObject3.groeße = "Größe: 2 m"
    93. pokeObject3.gewicht = "Gewicht: 100 Kg"
    94. pokeObject3.beschreibung = "Dieses Pokémon folgt der Sonne. Die Pflanze auf seinem Rücken absorbiert Solarenergie."
    95. pokeObject3.bild = UIImage(named: "Bisaflor")!
    96. let pokeObject4 = Pokemon()
    97. pokeObject4.pokemonName = "Glumanda"
    98. pokeObject4.pokedexNummer = "# 004"
    99. pokeObject4.typ = "Typ: Feuer"
    100. pokeObject4.groeße = "Größe: 0,6 m"
    101. pokeObject4.gewicht = "Gewicht: 8,5 Kg"
    102. pokeObject4.beschreibung = "Dieses POKéMON bevorzugt heiße Lebensräume. Bei Regen dampft die Schwanzspitze von GLUMANDA."
    103. pokeObject4.bild = UIImage(named: "Glumanda")!
    104. let pokeObject5 = Pokemon()
    105. pokeObject5.pokemonName = "Glutexo"
    106. pokeObject5.pokedexNummer = "# 005"
    107. pokeObject5.typ = "Typ: Feuer"
    108. pokeObject5.groeße = "Größe: 1,1 m"
    109. pokeObject5.gewicht = "Gewicht: 19 Kg"
    110. pokeObject5.beschreibung = "Wenn GLUTEXO mit seinem Schwanz schwingt, steigt die Temperatur ins Unermessliche."
    111. pokeObject5.bild = UIImage(named: "Glutexo")!
    112. pokeItem.append(pokeObject1)
    113. pokeItem.append(pokeObject2)
    114. pokeItem.append(pokeObject3)
    115. pokeItem.append(pokeObject4)
    116. pokeItem.append(pokeObject5)
    117. }
    118. }
    Alles anzeigen

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

  • da zeichen zuende sind mache ich noch ein Post. ich komm der sache schon näher aber es klappt noch nicht ganz. die funktion kommt übrigens vom 2. viewcontroller übers protocol mit delegate und so.

    Quellcode

    1. func searchNameFromUser(name: String) {
    2. let array = [Pokemon().pokemonName]
    3. if let index = array.firstIndex(of: name ) {
    4. print("\(index)")
    5. indexNummer = index
    6. }
    7. namenLabel.text = pokeItem[indexNummer].pokemonName
    8. nummerLabel.text = pokeItem[indexNummer].pokedexNummer
    9. beschreibungsLabel.text = pokeItem[indexNummer].beschreibung
    10. typLabel.text = pokeItem[indexNummer].typ
    11. groeßeLabel.text = pokeItem[indexNummer].groeße
    12. gewichtLabel.text = pokeItem[indexNummer].gewicht
    13. pokemonImageView.image = pokeItem[indexNummer].bild
    14. }
    Alles anzeigen
  • Ich glaube, wir warten auf eine konkrete Frage: "klappt nicht ganz" qualifiziert sich nicht als Fehlerbeschreibung. Was funktioniert nicht, was hast Du per Debugger oder Log-Ausgaben getestet?

    ... als Anfänger würde ich Dir weiterhin das händische Iterieren (also Durchlaufen der Schleife) empfehlen: Dann musst Du Dich mit den einzelnen Schritten selber auseinandersetzen und weisst am Ende, warum was passiert. Optimieren sollte man m. E. erst, wenn man sein Handwerkszeug beherrscht.

    Komplette Codes zu posten (und auf ein Review zu hoffen) ist eher kontraproduktiv ... trotzdem solltest Du mal zurueckButton mit weiterButton vergleichen: Da fehlt der oben von mir angesprochene Transfer.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Der Reihe nach - nur weil ein Kompiler keinen Fehler wirft, muss Code nicht funktionieren:
    1. Ist name in der Funktion gefüllt?
    2. Ist array in der Funktion gefüllt?
    3. Auf welchen Wert wird index gesetzt?
    Arbeite nicht mit Vermutungen, sondern schaue Dir Variablen im Debugger oder per Log-Ausgabe an. Und im Zweifelsfall prüfe Deinen Code Zeile für Zeile, ob jede Variable das erwartete Ergebnis hat. Manchmal macht es sogar Sinn, kombinierte Befehle in Einzelschritte zu zerlegen.

    Auch das ist Programmieren...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ich verstehe den Code nicht so ganz.

    Du erstellst dir hier ein Array mit einem Pokémon Namen

    Quellcode

    1. let array = [Pokemon().pokemonName]

    Der Name ist doch leer, so kannst du auch nichts finden.
    Eigentlich musst du deinen Filter doch auf dein Array pokeitem anwenden.



    Quellcode

    1. let name = "Blablubb"
    2. let pokeItem = [
    3. Pokemon(name: name)
    4. ]
    5. if let index = pokeItem.firstIndex(where: { pokemon -> Bool in
    6. return pokemon.name == name
    7. }) {
    8. print(index)
    9. }
    Alles anzeigen