Dictionary 如何优化字典和while循环

Dictionary 如何优化字典和while循环,dictionary,optimization,while-loop,swift3,runtime,Dictionary,Optimization,While Loop,Swift3,Runtime,我正在hackerrank站点中解决任务,并收到有趣的运行时错误,该错误与测试中放置的数据量有关 任务: 给定姓名和电话号码,组装一本地图电话簿 将朋友的姓名添加到各自的电话号码中。那么你就会 提供了未知数量的姓名以查询您的电话簿。对于 每次查询时,在屏幕上打印通讯录中的相关条目 格式name=phoneNumber中的新行;如果找不到的条目, 未找到打印 我的解决方案: let n = Int(readLine()!)! //Amount of tests let count = n * 2/

我正在hackerrank站点中解决任务,并收到有趣的
运行时错误
,该错误与测试中放置的数据量有关

任务:

给定姓名和电话号码,组装一本地图电话簿 将朋友的姓名添加到各自的电话号码中。那么你就会 提供了未知数量的姓名以查询您的电话簿。对于 每次查询时,在屏幕上打印通讯录中的相关条目 格式name=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
} 
让n=Int(readLine()!)//测试量
让count=n*2//插入字典并验证数据
var步长=0
var book=字典(最小容量:n)
而步长<计数{
如果(步骤

我对优化代码以避免运行时错误感兴趣。我已经做了一些调整,它们与
字典
最小容量
以及
的使用有关,而不是
for loop
。您能告诉我应该修复什么吗?

输入数据由一个固定的部分组成(条目编号
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")
    }
} 

输入数据由一个固定的部分组成(条目数
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")
    }
} 

“优化”和“避免运行时错误”是两个不同的任务。您的程序对Hackerrank来说是太慢了还是终止时出现了错误?@MartinR除了包含100000个元素的测试用例外,所有测试用例都运行良好此测试生成运行时错误您的代码如何处理“要查询的未知名称数”?您似乎假设条目后面跟着相同数量的查询。@MartinR您是对的,这是一个要点。请将您的通知作为答案发布。“优化”和“避免运行时错误”是两个不同的任务。您的程序对Hackerrank来说是太慢了还是终止时出现了错误?@MartinR除了包含100000个元素的测试用例外,所有测试用例都运行良好此测试生成运行时错误您的代码如何处理“要查询的未知名称数”?您似乎假设条目后面跟着相同数量的查询。@MartinR您是对的,这是一个要点。请将您的通知作为答复。