Swift:正在转换
Swift: Converting
我正在努力转换字典格式:
我正在尝试将下面的项目数组转换为下面的结果数组。本质上是通过在项目第一个元素中查找重复项,然后仅在第一个参数不同时才将文件添加到结果集中。
var items:[[String]] = [["a", "b"],["a", "c"],["b", "c"]]
var result:[[String:[String]]] = [
["a":["b","c"]],
["b":["c"]]
]
我曾尝试使用大量数组,但我一直在 xcode 中遇到错误。知道最好的方法是什么吗?
for in 循环似乎总是缺少一项。帮助将不胜感激。
如果 result
可以是字典 - 正如您在评论中提到的那样 - 您可以这样做:
var result = [String:[String]]()
items.forEach {
if let entry = result[[=10=][0]] {
result[[=10=][0]]?.append([=10=][1])
} else {
result[[=10=][0]] = [[=10=][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
),因此您必须访问当前值使用 [=17=]
.
这段代码的结果将是
["a": ["b", "c"], "b": ["c"]]
我假设了一个一般情况,其中 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])
}
}
}
}
我正在努力转换字典格式: 我正在尝试将下面的项目数组转换为下面的结果数组。本质上是通过在项目第一个元素中查找重复项,然后仅在第一个参数不同时才将文件添加到结果集中。
var items:[[String]] = [["a", "b"],["a", "c"],["b", "c"]]
var result:[[String:[String]]] = [
["a":["b","c"]],
["b":["c"]]
]
我曾尝试使用大量数组,但我一直在 xcode 中遇到错误。知道最好的方法是什么吗?
for in 循环似乎总是缺少一项。帮助将不胜感激。
如果 result
可以是字典 - 正如您在评论中提到的那样 - 您可以这样做:
var result = [String:[String]]()
items.forEach {
if let entry = result[[=10=][0]] {
result[[=10=][0]]?.append([=10=][1])
} else {
result[[=10=][0]] = [[=10=][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
),因此您必须访问当前值使用 [=17=]
.
这段代码的结果将是
["a": ["b", "c"], "b": ["c"]]
我假设了一个一般情况,其中 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])
}
}
}
}