我正在努力在字典格式之间进行转换: 我试图将下面的项数组转换为下面的结果数组。基本上通过在第一个元素中查找重复项,然后在第一个参数不同时仅将结果集添加到结果集中。
sed '/19:55/{
N
N
N
N
N
s/\n/ /g
}' file.txt
我尝试过使用多个阵列但是我的xcode中一直存在错误。知道最好的方法是什么吗?
for in循环似乎总是出现一个项目。非常感谢帮助。
答案 0 :(得分:0)
如果result
可以是字典 - 正如您在评论中提到的那样 - 您可以这样做:
var result = [String:[String]]()
items.forEach {
if let entry = result[$0[0]] {
result[$0[0]]?.append($0[1])
} else {
result[$0[0]] = [$0[1]]
}
}
为了便于阅读,您还可以将其写为:
var result = [String:[String]]()
for item in items {
if let entry = result[item[0]] {
result[item[0]]?.append(item[1])
} else {
result[item[0]] = [item[1]]
}
}
items.forEach {...}
与常规for..in
循环基本相同,只是没有命名变量(在本例中为item
),因此您必须访问当前值使用$0
。
此代码的结果将是
["a": ["b", "c"], "b": ["c"]]
答案 1 :(得分:0)
我假设一般情况下,item中的子数组可以包含多个字符串。这也允许items数组中的空数组。这给出了结果[" a":[" b"," c"," g"]," b" :[" c"]," c":[]]
func testThree() {
let items = [["a", "b"],["a", "c", "g"],["b", "c"],["c"]]
var result:[String:[String]] = [:]
for arr in items {
if(arr.count > 0) {
let first = arr[0]
if(result[first] != nil) {
result[first]!.append(contentsOf: arr[1..<arr.count])
} else {
result[first] = Array(arr[1..<arr.count])
}
}
}
}