Lineare Suche II

article header

Aktualisiert am 11. Oktober 2017


Im Artikel “Lineare Suche in Swift und Python” habe ich die lineare Suche nach einem Integer-Wert in einem Array vorgestellt. Nun ist es etwas umständlich, für jeden Datentyp ein separate Such-Funktion schreiben zu müssen. Außerdem führt es zu nicht wünschenswerten Code-Wiederholungen.

In Swift sollte man daher Generics nutzen, um eine allgemeingültige Funktion zu erhalten:

let myArray = [4, 12, 17, 33, 11, 53]

func linearSearch<E: Equatable>(_ array:[E], _ object: E) -> String {
    for (i, value) in array.enumerated() where value == object {
        return String(i)
    }
    return "Value is not in the array."
}

var r1 = linearSearch(myArray, 17)
// -> 2
var r2 = linearSearch(myArray, 10)
// -> Value is not in the array.

Diese Funktion erlaubt beispielsweise auch eine Iteration über String-Elemente:

let myStringArray = ["Bochum", "Magdeburg", "Hamburg", "Nürnberg", "Bonn", "Stralsund"]

func linearSearch<E: Equatable>(_ array:[E], _ object: E) -> String {
    for (i, value) in array.enumerated() where value == object {
        return String(i)
    }
    return "Value is not in the array."
}

var r1 = linearSearch(myStringArray, "Hamburg")
// -> 2
var r2 = linearSearch(myStringArray, "München")
// -> Value is not in the array.

In Swift geht es aber aufgrund der Methode index(of:) noch einfacher:

let index = myStringArray.index(of: "Hamburg")
print(index!) // -> 2

Freilich ist es stets besser, dass Auspacken einer optionalen Variable nicht zu erzwingen:

let index = myStringArray.index(of: "München")
if let index = index {
    print(index)
} else {
    print("Value is not in the array.")
}

Zum Abschluss noch der Hinweis, dass index(of:) auch auf einzelne Zeichen eines Strings angewendet werden kann:

let myString = "Hello, World!"
let index = myString.characters.index(of: "d") // -> 11

Weiterführende Links:

Durch Benutzung dieser Website erklären Sie sich mit der Verwendung von Cookies einverstanden. Mehr Informationen

Die Verwendung von Cookies dient dazu, Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf diese Website zu analysieren. Außerdem werden Informationen zur Nutzung dieser Webseite an Partner für soziale Medien, Werbung und Analysen weitergegeben.

Schließen