2017-06-13 9 views
0

要素の配列をフィルタリングする際に問題があります。要素のフィルタリング

Box 
-[Zombies] 
-[Players] 
-[Weapons] 

私は、上記のすべての配列を含むことができるボックスの束を持っています。

[Box] 

ここで、除外したいボックスを除外したいと思います。 私は特定のzombieId + playerIdを選択した場合、私は唯一など

ものとボックスを取得する私のようなものを使用してみました:

let filteredBoxes = boxes.filter { (box) -> Bool in 

selectedZombies.contains(where: { $0.zombieId == box.zombies.zombieId }) 
&& 
selectedPlayers.contains(where: { $0.playerId == box.players.playerId }) 
&& 
selectedWeapons.contains(where: { $0.weaponId == box.weapons.weaponId }) 
    } 

これは動作しますが、前にすべての3つのフィルタを選択するようユーザに要求します何かが表示されます。

また、選択されたゾンビのフィルタしか選択しなくても、ユーザーの選択に一致するボックスを表示する必要があります。

+0

あなたは、ユーザーが「ゾンビ」と「武器」のみを選択してその2つだけをフィルタリングする必要がある場合、いくつかのフィルタオプションを選択することを意味しますか? –

+0

はいいいえ – WYS

答えて

2

特定の条件をフィルタリングする場合は、タイプBoolの3インスタンスプロパティを宣言して、現在使用可能なフィルタのユーザーを制御し、filterで使用します。

var filterZombie = true 
var filterPlayer = true 
var filterWeapon = false 
//So now filterZombie and filterPlayer is true you want to filter only these two condition so make filter like this 
let filterArray = boxes.filter { (box) -> Bool in 
    let zombieResult = filterZombie ? selectedZombies.contains(where: { $0.zombieId == box.zombies.zombieId }) : true //Set default result as true 
    let playerResult = filterPlayer ? selectedPlayers.contains(where: { $0.playerId == box.players.playerId }) : true //Set default result as true 
    let weaponResult = filterWeapon ? selectedWeapons.contains(where: { $0.weaponId == box.weapons.weaponId }) : true //Set default result as true 
    return zombieResult && playerResult && weaponResult 
} 
+0

ありがとう、私はこのo.O.O. – WYS

+1

@WYSようこそ、あなたのためにうれしい嬉しい:) –

関連する問題