我正在通过完成 HackerRank 的测试样例来为编程面试做准备。如果你熟悉这个过程,你通常需要使用包含多行字符串的标准输入,并根据问题要求提取信息。我遇到了许多问题,其中他们会给你一行(作为
String
),里面有用空格分隔的 n
个整数(例如:1 2 3 4 5
)。为了解决这个问题,我需要从 String
中推导出一个 [Int]
类型的数组。我想出了这个巧妙的方法:func extractIntegers(_ s: String) -> [Int] {
let splits = s.characters.split { [" "].contains(String($0)) }
return splits.map { Int(String($0).trimmingCharacters(in: .whitespaces))! }
}
我把代码写在我的 Playground 里,它表现得非常出色,我甚至运行了多个自己编造的测试用例,它们全部都以优异的成绩通过了……然后我把代码复制到 HackerRank 平台上进行提交尝试。结果我得到了以下信息:
solution.swift:16:29: error: value of type 'String' has no member 'trimmingCharacters'
return splits.map { Int(String($0).trimmingCharacters(in: .whitespaces))! }
嗯...好吧,也许人力资源部门还没有更新Swift 3的所有内容。没关系!我有一个更干净的解决方案的想法!以下是我的建议:
func extractIntegers(_ s: String) -> [Int] {
return s.components(separatedBy: " ").map { Int($0)! }
}
当然,还有:
solution.swift:15:12: error: value of type 'String' has no member 'components'
return s.components(separatedBy: " ").map { Int($0)! }
现在我被迫使用一种非常笨拙的方法,循环遍历所有字符,检查空格,在空格之间附加子字符串到一个数组中,然后映射该数组并返回。
有没有其他更好的解决 HR 在 Swift 上不足的方法?我希望能得到任何可用的建议!
提前致谢!
Foundation
。 - Martin R