2016-12-04 8 views
3

Swift 3では、典型的なCスタイルのforループからいくつかの変更がありました。私はそれを回避しようとしていますが、多くの場合以前より多くのコードを書いているようです。私が望むものなので、誰かが私を正しい方向に向けることができるかもしれません:配列の最後のインデックス以外のすべてを反復する

かなり簡単なもの。私はインデックスを取得することができるのが好きで、names.count == 0.の場合はforループが実行されないようにします。

しかし、Swift 3の私のオプションが私にこれを許可していないようです。私は0 ... 0 {}

に私のために:

let names : [String] = ["Jim", "Jenny", "Earl"] 
if names.count > 0 { 
    for i in 0...(names.count - 1) { 
     NSLog("%@ loves %@", names[i], names[i+1]) 
    } 
} 

私のプログラムは、それが読み込み状況でクラッシュしてしまいますので、スタート時のステートメントが必要な場合は、ザ・:私のような何かをしなければならないでしょうまた、単に明示的にインデックスを設定せずにすべてを反復処理することができるという考え方のように:

// Pseudocode 
for name in names.exceptLastOne { 
    NSLog("%@ loves %@", name, name.plus(1)) 
} 

すべての私の欲求をミックス構文のいくつかの並べ替えがあるように私は感じるが、私はまだそれに遭遇していません。誰かが方法を知っていますか?あるいは少なくとも私のコードをもっとコンパクトにする方法?

UPDATE:

for (index, name) in names.enumerated {} 

ハミッシュの回答と比較すると、これに伴う問題があることである:誰かがこの質問はすでに解決策が度に何かを使用していたところSO投稿を引用し、求められていることが示唆されました現在の名前のインデックスのみが与えられています。それで私はインデックスの値をインデックスのようにする必要はありません。

names[index + 1] 

これは、追跡する余分な変数の1つです。私が好むあるハミッシュさん:

for i in names.indices.dropLast() { 
    print("\(names[i]) loves \(names[i + 1])") 
} 

、ショートシンプル、そして名前だけのトラックと私ではなく、名前、インデックス、および名前を維持する必要があります。

+0

[swift for loop:インデックスでは配列内の要素ですか?](http://stackoverflow.com/questions/24028421/swift-for-loop-index-element-in-array) – dasblinkenlight

+2

'名前の名前。dropLast(){' –

+3

@LeoDabusしかし、OPは各反復中に配列から2つの異なるオブジェクトにアクセスする必要があります。 – rmaddy

答えて

7

アレイのindicesdropLast()を使用して、配列の最後のインデックス以外のすべての文字をCountableRangeで反復することができます。

let names = ["Jim", "Jenny", "Earl"] 

for i in names.indices.dropLast() { 
    print("\(names[i]) loves \(names[i + 1])") 
} 

配列の要素が2つ未満の場合、ループは入力されません。

for (nameA, nameB) in zip(names, names.dropFirst()) { 
    print("\(nameA) loves \(nameB)") 
} 

これは事実を利用しています:

別のオプションは、あなたが彼らの後継要素と要素のペアを反復処理することができ、zip最初の要素が削除された配列を持つ配列になりますzipは、同じ長さでない場合、2つのシーケンスのうちの長いものを切り捨てます。したがって、配列の要素が2つ未満の場合、ループは入力されません。

+0

うわー、私はジップについて知りませんでした!それは素晴らしいです!また、indicies.dropLast()についても知らなかった。私はインデックスへの参照が好きなので、間違いなくそれを利用します。 – Kjell

関連する問題