我是新來的。有沒有一種簡單的方法可以將以下字串轉換為字典格式。
例子:
input = "Name: Jack\\n Area: Place\\n FavColor: Blue\\n"
預期輸出:
dict = \[Name: Jack, Area: Place, FavColor: Blue\]
并且還應修剪前導空格。
鍵值對總是在新行中。
我的想法是首先根據換行符拆分字串
lines = input.components(separatedBy: CharacterSet.newlines)
然后遍歷行并根據“:”拆分每一行并將它們放入dict中。
還有其他有效的方法嗎?
uj5u.com熱心網友回復:
一個可能的解決方案是正則運算式,它搜索模式word - colon - whitespace(s) - word并捕獲兩個詞
let input = "Name: Jack\n Area: Place\n FavColor: Blue\n"
let pattern = "(\\b.*\\b):\\s (\\b.*\\b)" // or "(\\w ):\\s (\\w )"
let regex = try! NSRegularExpression(pattern: pattern)
var result = [String:String]()
regex.matches(in: input).forEach { match in
if let keyRange = Range(match.range(at: 1), in: input),
let valueRange = Range(match.range(at: 2), in: input) {
result[String(input[keyRange])] = String(input[valueRange])
}
}
print(result)
uj5u.com熱心網友回復:
我通常的做法是將字串拆分為字串陣列,并使用位置來確定元素是鍵還是值。之后,使用 stride 一次回圈遍歷陣列兩個元素以分配輸出字典,其中第一個元素是鍵,第二個元素是值。
let input = "Name: Jack\n Area: Place\n FavColor: Blue\n"
let charSet = CharacterSet(charactersIn: "\n:")
let tokenized = input.components(separatedBy: charSet).map {
$0.trimmingCharacters(in: .whitespaces)
}
var dict = [String : String]()
for index in stride(from: 0, to: tokenized.count - 1, by: 2) {
dict[tokenized[index]] = tokenized[index 1]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/446943.html
