2015-07-26 15 views
5

Hızlı 2.0 belgelerini kullanarak çalışıyorum ve C++ 'da öğrendiğim bazı şeyleri denemeye çalışıyorum. Bunlardan biri, benim elemanımın içinde hızlıca yapmakta zorlandığım elementlerin içinde yer alan elementleri değiştirebilme yeteneğidir.Bir dizinin değerlerini işlev içinde veya iç içe bir işlev içinde bir iç döngü kullanarak nasıl değiştiririm?

var scoreOfStudents = [86, 93, 68, 78, 66, 87, 80] 

func returnScoresWithCurve (inout scoresOfClass : [Int]) -> [Int] { 
     for var score in scoresOfClass { 
      if score < 80 { 
       score += 5 
      } 
     } 
     return scoresOfClass 
} 

benim hata nedeniyle for-in döngüsünü, en az 80 ekleniyor ama dizide modifiye edilmiyor puanları geçtim içinde ne olduğunu bilmiyorum. Aynı şeyi, iç içe geçmiş bir işlevi kullanarak değil, aynı şeyi nasıl yapabildiğimi bilmek isterim.

cevap

13

Bunun gibi bir giriş döngüsünü kullanmanın, değişken değişkeninizin, dizininizin gerçek dizinine bir başvuru değişkeninin tersine, dizi öğesinin değer kopyası olduğunu düşünüyorum. İndeksler boyunca yinelemek ve scoresOfClass[index]'u değiştiririm.

Yapmak istediğiniz şeyi yapmalısınız. Ayrıca

var scoreOfStudents = [86, 93, 68, 78, 66, 87, 80] 

func returnScoresWithCurve(inout scoresOfClass: [Int]) -> [Int] { 
    for index in scoresOfClass.indices { 
     if scoresOfClass[index] < 80 { 
      scoresOfClass[index] += 5 
     } 
    } 
    return scoresOfClass 
} 

, sen dönen yaparken neden sen inout scoresOfClass kullanıyorsunuz?

+3

"-1" yerine '.. <' kullanın. –

+4

Veya daha da iyisi: 'ScoreOfClass.indices' içinde dizin için. –

+0

teşekkürler! Bu işe yaradı ama @Mario Zannone'un çözümü çok daha basit ve daha temiz – Muhammad

9

@ChrisMartin doğrudur: yalnızca skorun bir kopyasını değiştirerek, dizideki orijinali değil, indeksle olan yaklaşımı değiştirirsiniz. swifty

başka, daha çözüm aşağıdaki gibidir:

Burada returnScoresWithCurve
func returnScoresWithCurve (scoresOfClass : [Int]) -> [Int] { 
    return scoresOfClass.map { $0 < 80 ? $0 + 5 : $0 } 
} 

orijinal değiştirmek yerine modifiye edilmiş bir diziyi döndürür. Benim görüşüme göre bu bir artı.

+1

Hızlı nüanslar, sevinçten kopmak ve aynı zamanda umutsuzluk içinde ağlamak istiyorum. Aferin, aferin! – schrismartin

+0

kod temizliği hakkında konuşmak, güzel cevap için teşekkürler! Şimdi iç içe geçmiş bir işlevi nasıl kullanabileceğimi anlamaya ve bu sorunu çözmeye çalışıyorum – Muhammad

İlgili konular