2017-10-05 54 views
-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

按“分数”对字典数组进行排序,然后打印数组中的前两个元素。 – DonMag

+0

排序总是一个选项,但是如果您只需要前2个元素,您也可以执行相同的循环,但只需忽略下一次运行中最顶端的输入。 – xander

+0

@DonMag的分选解决方案是一个很好的解决方案。请下次使用正确的缩进使您的代码更具可读性 –

回答

0

添加第二个变量以跟踪第二高分。

当您在检查当前元素是否为新的最高分(if bestScore < score)之后迭代for循环中的数组时, 添加一个“else”分支。 你检查它是否高于存储在第二个变量中的分数。如果是这样,则将此分数分配给第二个变量。

在“if”分支中,在将分数分配给bestScore之前,将bestScore分配给保留第二高分数的变量的变量。

0

更通用的解决方案可能是按分数排序词典;那么,你可以通过检查字典中的n-1的索引来获得前n个结果。