2017-12-13 16 views
0

間の差を取得します。 cardsOnTableは、cardsInHandからのみ可能です。たとえば、カード1を再生すると、cardsInHand[2,3]、cardsOnableは[1]になります。フィルタを使用してこれを達成できますが、cardsInHandから削除された値は失われます。逆はその後cardsInHand[1,2,3]cardsOnTableなり、Iカード1バックアップ場合は、真である[]スウィフトは、私は次の配列を持つ2つのアレイ

let cardsPlayed = 1 

cardsInHand = cardsInHand.filter { $0 != cardsPlayed } 

print(cardsInHand) 

[2,3] 

になりますどのように私はcardsOnTablecardsPlayedcardsInHandの違いも得ることができますか?

見出しが誤解を招く場合は申し訳ありませんが、説明する方法がわかりませんでした。私はマップ、削減またはフィルタがこれを処理する最も簡単な方法かもしれないと感じています。

+0

これは 'cardsInHand.filter {cardsPlayed.contains($ 0)}'であるはずですか? – Alexander

+0

カードをフィルタリングする代わりに、カードに追加する必要があります。カードから取り出したときに返されるカードは、「 –

+0

」ですが、cardsInHandから削除された値は失われます。それはどういう意味ですか? –

答えて

1

あなたは、単にあなたが直接配列にそれらを格納することができ、あなたがコメントで述べたように、廃棄された複数のカードがある場合には、この

let cardsPlayed = 1 
    if let index = cardsInHand.index(of: cardsPlayed) 
    { 
     cardsOnTable += [cardsInHand.remove(at: index)] 
    } 

のように、あなたの目標を達成するためremove(at:) FUNCを使用することができますcardsOntableとこのように使用します。

 cardsOnTable += [1,2] 
    cardsInHand = cardsInHand.filter{!self.cardsOnTable.contains($0)} 
+0

let cardsPlayed = [1,2]をIntの代わりに配列として使うと、この動作はどうですか?あなたの提案は素晴らしいです! –

+0

私は自分の答えを編集しました。それがあなたを助けてくれるのであれば返信してください。ありがとう –

関連する問題