我正在hackerrank网站上解决任务,并收到与测试中放置的数据量相关的有趣Runtime Error
。
任务:
根据姓名和电话号码,汇编一张映射的电话簿 朋友'姓名分别为各自的电话号码。那你就是 给出一个未知数量的名称来查询您的电话簿。对于 每个查询,打印电话簿中的相关条目 形式名称= phoneNumber的新行;如果找不到条目, 打印未找到。
我的解决方案:
let n = Int(readLine()!)! //Amount of tests
let count = n * 2//Insertion to the dictionary and validation of the data
var step = 0
var book = Dictionary<String, String>(minimumCapacity: n)
while step < count {
if (step < n ) {
let bookData = readLine()!.characters.split{$0 == " "}.map(String.init)
book[bookData[0]] = bookData[1]
} else {
let name = readLine()!
if let num = book[name] as String! {
print("\(name)=\(num)")
} else {
print("Not found")
}
}
step += 1
}
我对优化代码感兴趣以避免Runtime Error
。我已经做了一些调整,他们与minimumCapacity
的{{1}}以及Dictionary
而不是while
的使用情况相关联。你能告诉我应该修理什么吗?
答案 0 :(得分:2)
输入数据包含固定部分(编号N
条目,
后跟N
行名称/数字对)和变量部分
(查询)。
您可以对固定部分使用强制展开readLine()!
,因为
你知道它会成功。但是对于你可变的部分
致电readLine()
直到它返回nil
。
代码看起来像这样:
let n = Int(readLine()!)! // Number of entries
var book = [String: String](minimumCapacity: n)
for _ in 1...n {
let bookData = readLine()!.characters.split{$0 == " "}.map(String.init)
book[bookData[0]] = bookData[1]
}
while let name = readLine() {
if let num = book[name] {
print("\(name)=\(num)")
} else {
print("Not found")
}
}