532 Stimmen

Wie finde ich den Index des Listenelements in Swift?

Ich versuche, einen Elementindex zu finden, indem ich eine Liste durchsuche. Weiß jemand, wie das geht?

Ich sehe, dass es Liste.StartIndex und Liste.EndIndex gibt, aber ich möchte etwas ähnliches wie list.index("text") in Python.

21voto

Dwigt Punkte 395

In Swift 4 kann die Methode firstIndex verwendet werden. Ein Beispiel für die Verwendung des == Gleichheitsoperators zum Finden eines Objekts in einem Array anhand seiner id:

let index = array.firstIndex{ $0.id == object.id }
  • Beachten Sie, dass diese Lösung dazu führt, dass Ihr Code nicht dem Equatable-Protokoll entsprechen muss, da wir die Eigenschaft vergleichen und nicht das gesamte Objekt

Auch ein Hinweis zu == vs ===, da viele der bisher geposteten Antworten in ihrer Verwendung unterschieden haben:

  • == ist der Gleichheitsoperator. Er überprüft, ob Werte gleich sind.
  • === ist der Identitätsoperator. Er überprüft, ob zwei Instanzen einer Klasse auf denselben Speicher zeigen. Dies unterscheidet sich von der Gleichheit, da zwei Objekte, die unabhängig voneinander mit denselben Werten erstellt wurden, mithilfe von == als gleich betrachtet werden, jedoch nicht mit ===, da es sich um verschiedene Objekte handelt. (Quelle)

Es wäre sinnvoll, mehr über diese Operatoren in der Dokumentation von Swift zu lesen.

16voto

Ridho Octanio Punkte 543

In Swift 4.2

.index(where:) wurde geändert zu .firstIndex(where:)

array.firstIndex(where: {$0 == "person1"})

15voto

ZYiOS Punkte 5134

Für die benutzerdefinierte Klasse müssen Sie das Equatable-Protokoll implementieren.

import Foundation

func ==(l: MyClass, r: MyClass) -> Bool {
  return l.id == r.id
}

class MyClass: Equtable {
    init(id: String) {
        self.msgID = id
    }

    let msgID: String
}

let item = MyClass(3)
let itemList = [MyClass(1), MyClass(2), item]
let idx = itemList.indexOf(item)

printl(idx)

13voto

erdikanik Punkte 584

Verwenden Sie einfach die firstIndex-Methode.

array.firstIndex(where: { $0 == searchedItem })

10voto

Gurjinder Singh Punkte 7152

Swift 4. Wenn Ihr Array Elemente des Typs [String: AnyObject] enthält. Verwenden Sie also den folgenden Code, um den Index des Elements zu finden

var array = [[String: AnyObject]]()// Speichern Sie Ihre Daten im Array
let objectAtZero = array[0] // das erste Objekt erhalten
let index = (self.array as NSArray).index(of: objectAtZero)

Oder Wenn Sie den Index auf der Grundlage des Schlüssels aus dem Dictionary finden möchten. Hier enthält das Array Objekte der Modellklasse und ich gleiche die id-Eigenschaft ab.

   let userId = 20
    if let index = array.index(where: { (dict) -> Bool in
           return dict.id == userId // Wird den Index der übereinstimmenden id finden
    }) {
    print("Index gefunden")
    }
ODER
      let storeId = Int(surveyCurrent.store_id) // Zugriff auf Modellschlüsselwert
      indexArrUpTo = self.arrEarnUpTo.index { Int($0.store_id) == storeId }! // Array enthält Modelle und findet spezifisches

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X