2016-07-07 2 views
1

のためにこれを理解するのに役立ち:iOSのスウィフト:私はスウィフト2.2についてのiBookを読んでいると、サンプルコードでは、この機能があるループ機能

func minMax(array: [Int]) -> (min: Int, max: Int) { 

    var currentMin = array[0] 
    var currentMax = array[0] 

    for value in array[1..<array.count] { 

     if value < currentMin { 
      currentMin = value 
     } 

     if value > currentMax { 
      currentMax = value 
     } 
    } 

    return (currentMin, currentMax) 
} 

let values = [21, 1, -4, 7, 2, 12, 88, 12021, 456] 
let bounds = minMax(values) 

私は、コードのこの部分を試してみましたが、私ドン「Tは、ループのため、ここでどのように動作するかを理解する:

for value in array[1..<array.count] 

はなぜ書かない:for value in arrayを代わりに?私が気づい 唯一のものはである:

for value in array[1..<array.count] 

最小値と最大数を見つけるために、2回ループしています。 しかし、for value in arrayを使って、もちろん9回。

var currentMin = array[0] 
var currentMax = array[0] 

だから、それを再度チェックする必要はありません。

+0

>それは2回ループしています - それはどういう意味ですか?どうやって計算しますか? –

+0

私はプレイグラウンドで試して、右側に見た(2回) – Lapinou

+2

ああ、いいえ...私の遊び場は、私の "if"ステートメントが何回真実かを私に見せてくれます...私はループ( "")私に8回を示しています...私は今理解しています...この愚かな質問に申し訳ありません:/ – Lapinou

答えて

3

関数の最初の2行は、すでに最初の要素を読んでいます。 array[1..<array.count]は以外の配列のすべての要素を返します(範囲は0ではなく1で始まります)。

+0

ああ私の良い!はい、ありがとうございます。しかし、私はどのようにわずか2ループで最小値/最大値を見つけることが可能であるか分かりません。 – Lapinou

+4

'array [1 .. dfri

+0

ニース!このヒントをありがとう! :) – Lapinou

2

この最初の要素は現在の最小/最大参照であるため、ループは最初の配列要素で始めるべきではありません。

これは、ループが2番目のインデックス付き要素(:[1..<array.count])で開始する理由です。

array[1..<array.count]は、2番目の要素から最後の要素に向かう配列のスライスです。

関連する問題