2017-10-05 4 views
-2

このコードは、ディクショナリで最高得点をプリントアウトします。 2番目に高いスコアを印刷するにはどうしたらいいですか?私はトップ2の得点を印刷したい。ジクレープリントでトップ2の最高得点をプリント

import UIKit 

var people: [[String:Any]] = [ 
    [ 
     "firstName": "Sam", 
     "lastName": "Newton", 
     "score": 13 
    ], 
    [ 
     "firstName": "Joe", 
     "lastName": "Mckenzie", 
     "score": 23 
    ], 
] 

var topPerson = people[0] 
var bestScore = topPerson["score"] as! Int 
var bestScore1 = topPerson["score"] as! Int 

for person in people { 
    if let score = person["score"] as? Int { 
     if bestScore < score { 
      bestScore = score 
      topPerson = person 
     } 
    } 
} 

if let first = topPerson["firstName"] as? String, 
    let second = topPerson["lastName"] as? String { 
    print("\(first) \(second)") 
} 
+1

辞書の配列を「スコア」で並べ替え、配列の最初の2つの要素を印刷します。 – DonMag

+0

ソートは常にオプションですが、上位2つの要素だけが必要な場合は同じループを実行できますが、次回の実行では一番上のエントリを無視します。 – xander

+0

@DonMagのソーティングソリューションは良い解決策です。次回は、インデントを正しく使用してコードを少しだけ読みやすくしてください –

答えて

0

2番目に高いスコアを記録するために2番目の変数を追加します。

現在の要素が新しい最高スコア(if bestScore < score)であるかどうかを確認した後、forループの配列を反復処理すると、 "else"ブランチを追加します。 2番目の変数に格納されているスコアより高いかどうかをチェックします。そうであれば、このスコアを2番目の変数に割り当てます。

"if"ブランチでは、scoreをbestScoreに割り当てる前に、2番目に高いスコアを保持する変数にbestScoreを割り当てます。

0

より多目的な解決策は、スコアで辞書をソートすることです。次に、辞書のn-1のインデックスをチェックすることで上位n個の結果を得ることができます。

関連する問題