Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将阵列拆分/拆分为更小的阵列_Swift - Fatal编程技术网

Swift 将阵列拆分/拆分为更小的阵列

Swift 将阵列拆分/拆分为更小的阵列,swift,Swift,我有一个数组,其中文本字段是一个类别 [“id”、“cat”、“项目名称”]: [“1”、“cat1”、“某物”] [“2”、“cat2”、“某物”] [“3”、“cat1”、“某物”] [“4”、“cat1”、“某物”] [“6”、“cat1”、“某物”] [“7”、“cat2”、“某物”] [“8”、“cat2”、“某物”] [“9”、“cat2”、“某物”] 为了能够使用UITableView部分中的类别,我需要将阵列拆分为更小的阵列-对。 所以我需要: dic["cat1"][arra

我有一个数组,其中文本字段是一个类别
[“id”、“cat”、“项目名称”]


[“1”、“cat1”、“某物”]

[“2”、“cat2”、“某物”]

[“3”、“cat1”、“某物”]

[“4”、“cat1”、“某物”]

[“6”、“cat1”、“某物”]

[“7”、“cat2”、“某物”]

[“8”、“cat2”、“某物”]

[“9”、“cat2”、“某物”]

为了能够使用UITableView部分中的类别,我需要将阵列拆分为更小的阵列-对。

所以我需要:

dic["cat1"][array of items with cat1 in field]()
dic["cat2"][array of items with cat2 in field]()

你会怎么做呢?

我不会用
reduce
map
来做这件事。相反,我会这样做

var dict: [String: [[String]]] = [:]
arr.forEach() {
    if dict[$0[1]] == nil {
        dict[$0[1]] = []
    }

    dict[$0[1]]?.append($0)
}
但是,我建议您更改代码结构和模型以使用struct。因此,不要使用嵌套数组,而是执行以下操作

struct Item {
    let id: String
    let category: String
    let name: String
} 
这样代码就变得更清晰,更易于阅读

let arr2 = [
    Item(id: "1", category: "cat1", name: "Something"),
    Item(id: "2", category: "cat2", name: "Something"),
    Item(id: "3", category: "cat1", name: "Something")
]
var dict2: [String: [Item]] = [:]
arr2.forEach() {
    if dict2[$0.category] == nil {
        dict2[$0.category] = []
    }

    dict2[$0.category]?.append($0)
}

我不明白?在本例中,您将有两个键,每个键都有一个项目数组作为值。糟糕,也许我不应该再在手机上发表评论了:p您可以使用:
dict2[$0.category]=(dict2[$0.category]??[])+[$0]
来缩短它:)