web-dev-qa-db-fra.com

Vérifier si le tableau contient une partie d'une chaîne dans Swift?

J'ai un tableau contenant un certain nombre de chaînes. J'ai utilisé contains() (voir ci-dessous) pour vérifier si une certaine chaîne existe dans le tableau, mais j'aimerais vérifier si une partie d'une chaîne se trouve dans le tableau?

itemsArray = ["Google, Goodbye, Go, Hello"]

searchToSearch = "go"

if contains(itemsArray, stringToSearch) {
    NSLog("Term Exists")
}
else {
    NSLog("Can't find term")
}

Le code ci-dessus vérifie simplement si une valeur est présente dans le tableau dans son intégralité, mais j'aimerais trouver "Google, Google and Go"

15
Daniel Bramhall

Essayez comme ça. 

let itemsArray = ["Google", "Goodbye", "Go", "Hello"]
let searchToSearch = "go"

let filteredStrings = itemsArray.filter({(item: String) -> Bool in

     var stringMatch = item.lowercaseString.rangeOfString(searchToSearch.lowercaseString)
     return stringMatch != nil ? true : false
})

filteredStrings contiendra la liste des chaînes ayant des sous-chaînes correspondantes.

Dans Swift Array, struct fournit une méthode de filtrage permettant de filtrer un tableau fourni en fonction de critères de filtrage du texte.

20
Amit89

Tout d’abord, vous avez défini un tableau avec une seule chaîne . Ce que vous voulez probablement, c’est

let itemsArray = ["Google", "Goodbye", "Go", "Hello"]

Ensuite, vous pouvez utiliser contains(array, predicate) et rangeOfString() - éventuellement avec .CaseInsensitiveSearch - pour vérifier chaque chaîne du tableau .__ si elle contient la chaîne de recherche: 

let itemExists = contains(itemsArray) {
    $0.rangeOfString(searchToSearch, options: .CaseInsensitiveSearch) !=  nil
}

println(itemExists) // true 

Ou, si vous voulez un tableau avec les éléments correspondants au lieu d'un oui/non Résultat:

let matchingTerms = filter(itemsArray) {
    $0.rangeOfString(searchToSearch, options: .CaseInsensitiveSearch) !=  nil
}

println(matchingTerms) // [Google, Goodbye, Go]

Mise à jour pour Swift 3:

let itemExists = itemsArray.contains(where: {
    $0.range(of: searchToSearch, options: .caseInsensitive) != nil
})
print(itemExists)

let matchingTerms = itemsArray.filter({
    $0.range(of: searchToSearch, options: .caseInsensitive) != nil
})
print(matchingTerms)
21
Martin R

Essayez comme ça.

Swift 3.0

import UIKit

let itemsArray = ["Google", "Goodbye", "Go", "Hello"]

var filterdItemsArray = [String]()


func filterContentForSearchText(searchText: String) {
    filterdItemsArray = itemsArray.filter { item in
        return item.lowercased().contains(searchText.lowercased())
    }
}

filterContentForSearchText(searchText: "Go")
print(filterdItemsArray)

Sortie

["Google", "Goodbye", "Go"]
10
Ashok R
func filterContentForSearchText(_ searchText: String) {
   filteredString = itemsArray.filter({( item : String) -> Bool in
            return  item.lowercased().contains(searchText.lowercased())
    })
}
1
Jasica Peter

Si vous vérifiez simplement si un élément existe dans un tableau spécifique, essayez ceci:

var a = [1,2,3,4,5]

if a.contains(4) {
    print("Yes, it does contain number 4")
}
else {
    print("No, it doesn't")
}