2016-05-29 1 views
0

私はvar cards : [Card]を繰り返し実行し、各エントリに関数を実行しています。これらのエントリの一部は、その前にカードを変更します。配列の "私"の前のオブジェクト

1)「前のオブジェクト」と言う簡単な方法はありますか?

2)「コレクション内のインデックス」と言っても簡単な方法はありますか?その後、私はそのインデックス-1を使って前のカードを入手することができました。

今私はループしていますが、Swiftは私が知らなかったより簡単な解決策で私を驚かせました。私はこれがそうだと思っています。

更新: ここに基本コードがあります。 Deckは、Cardで構成され、それぞれの3Dジオメトリが記述されています。だから私は、パラメータdとしてDeckを取り、その後、これを行いドローと呼ばれる方法があります。

for g in d.cards { 
    switch g.info["type"] ?? "" { 
     case "GA" : arc(g) 
     case "GE" : ground(g) 
     case "GH" : helix(g) 
     case "GW" : wire(g) 
     case "SP" : patch(g) 
     case "SM" : multi(g) 
     case "GM" : duplicate(g, deck:d) 
     case "GR" : cylinder(g, deck:d) 
     default : continue 
    } 
} 

を今すぐそれらのカードの一部を、GMのようなインスタンスのために、以前のCardを複製します。だから私は以前にDeck全体をループして、gを探して、前のものを取った。これは準最適です! @ vadianの解決策はその問題をきちんと解決しました。

+2

両方があなたのアルゴリズムの詳細を記述することができる提供しますか?あなたが具体的でない場合には、どの解決策が最善になるかを言うのは少し難しいです。 – Sulthan

+0

はいスルタン、私はこれをたくさん広げておくべきだった。私は元の質問を更新しています。 –

答えて

3

enumerate機能は、アイテムとインデックス

let array = ["a", "b", "c", "d", "e"] 

for (index, item) in array.enumerate() { // Swift 3: enumerated() 
    print(item) 
    if index != 0 { print(array[index - 1]) } 
    // or – more sophisticated – array[index.predecessor()] 
} 
+0

私は以前これを見ていませんでしたが、それはほとんど問題の解決策のようです。ありがとう! –

関連する問題