0
votes

Filtrage des objets Array avec un tableau intérieur avec un autre tableau

Utilisez l'exemple de code suivant pour élaborer ma question:

struct exampleObj {
    var str: String?
    var arr: [String]?
}

let filterArray = ["something1", "ins1", "something2"]

let obj1 = exampleObj(str: "obj1", arr: ["ins2", "ins3"])
let obj2 = exampleObj(str: "obj2", arr: ["ins1", "ins2"])
let obj3 = exampleObj(str: "obj3", arr: ["ins1", "ins4"])
let obj4 = exampleObj(str: "obj4", arr: ["ins3", "ins4"])

var arrayObj = [obj1, obj2, obj3, obj4]

let result = arrayObj.filter { filterArray.contains($0.arr...)} //??? I get lost here, dunno if right approach.


1 commentaires

Quel est le but de déclarer vos propriétés facultatives si elles ne seront jamais nulles? Struct Exemplej {STR STR: String Soit Arr: [String]}} BTW Il s'agit de la convention de nommage rapide pour nommer vos structures commençant par un chantier supérieur


3 Réponses :


1
votes

Essayez ceci: xxx

ou en utilisant définir : xxx


0 commentaires

1
votes

Vous devez trouver des correspondances où il y a une intersection entre les valeurs des deux tableaux. Cela se fait plus facilement avec des ensembles. Vous devez également faire face à Art code> en option. XXX PRE>

Ceci serait plus efficace si vous déclarez filterarray code> en tant que jeu Code> Pour commencer. P>

let filterSet: Set = ["something1", "ins1", "something2"]

let obj1 = exampleObj(str: "obj1", arr: ["ins2", "ins3"])
let obj2 = exampleObj(str: "obj2", arr: ["ins1", "ins2"])
let obj3 = exampleObj(str: "obj3", arr: ["ins1", "ins4"])
let obj4 = exampleObj(str: "obj4", arr: ["ins3", "ins4"])

var arrayObj = [obj1, obj2, obj3, obj4]

let result = arrayObj.filter { !filterSet.intersection($0.arr ?? []).isEmpty }


0 commentaires

1
votes

Vous pouvez simplement faire en trouvant non-vide code> intersection code> entre filterarray code> et exemple de l'aiguillon d'Art code>, c'est-à-dire

let filterSet = Set(filterArray)
let result = arrayObj.filter { (exampleObj) -> Bool in
    if let arr = exampleObj.arr {
        return !filterSet.intersection(arr).isEmpty
    }
    return false
}


0 commentaires