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.
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.
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
Für (>= swift 4.0)
Es ist ziemlich einfach. Betrachte das folgende Array
Objekt.
var names: [String] = ["jack", "rose", "jill"]
Um den Index des Elements rose
zu erhalten, musst du einfach folgendes tun:
names.index(of: "rose") // gibt 1 zurück
Hinweis:
Array.index(of:)
gibt ein Optional
zurück.
nil
bedeutet, dass das Element nicht im Array vorhanden ist.
Eventuell möchtest du den zurückgegebenen Wert erzwingen oder ein if-let
verwenden, um mit dem Optional umzugehen.
In Swift 4, wenn Sie durch Ihr DataModel-Array traversieren, stellen Sie sicher, dass Ihr Datenmodell dem Equatable-Protokoll entspricht, implementieren Sie die Methode lhs=rhs und verwenden Sie dann erst ".index(of" . Zum Beispiel
class Photo : Equatable{
var imageURL: URL?
init(imageURL: URL){
self.imageURL = imageURL
}
static func == (lhs: Photo, rhs: Photo) -> Bool{
return lhs.imageURL == rhs.imageURL
}
}
Und dann,
let index = self.photos.index(of: aPhoto)
In Swift 2 (mit Xcode 7) enthält Array
eine indexOf
-Methode, die vom CollectionType
-Protokoll bereitgestellt wird. (Tatsächlich gibt es zwei indexOf
-Methoden - eine, die Gleichheit verwendet, um ein Argument zu finden, und eine andere, die einen Closure verwendet.)
Vor Swift 2 gab es keine Möglichkeit für generische Typen wie Sammlungen Methoden für die konkreten Typen abzuleiten, die von ihnen abstammen (wie Arrays). Also war in Swift 1.x "index of" eine globale Funktion... Und sie wurde auch umbenannt, also heißt diese globale Funktion in Swift 1.x find
.
Es ist auch möglich (aber nicht notwendig), die Methode indexOfObject
von NSArray
zu verwenden... oder eine der anderen, anspruchsvolleren Suchmethoden aus Foundation, die keine Entsprechungen in der Swift-Standardbibliothek haben. Einfach import Foundation
(oder ein anderes Modul, das transitsiv Foundation importiert), Ihr Array
in NSArray
umwandeln und Sie können die vielen Suchmethoden auf NSArray
verwenden.
Keine dieser Lösungen funktioniert für mich
Dies ist die Lösung, die ich für Swift 4 habe:
let montag = Day(name: "M")
let dienstag = Day(name: "D")
let freitag = Day(name: "F")
let tage = [montag, dienstag, freitag]
let index = tage.index(where: {
//wichtig, mit === zu testen, um sicherzustellen, dass es die gleiche Objektreferenz ist
$0 === dienstag
})
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.