Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays 如何将两个字典合并到一个数组中?_Arrays_Swift_Dictionary_Merge_Swift5 - Fatal编程技术网

Arrays 如何将两个字典合并到一个数组中?

Arrays 如何将两个字典合并到一个数组中?,arrays,swift,dictionary,merge,swift5,Arrays,Swift,Dictionary,Merge,Swift5,我的JSON数据如下图所示。现在,我想将商店类型和促销的值合并为一个,用作集合视图数据。我该怎么做 我只是从服务器中过滤响应数据,如下所示: var dataBanDau: [SDFilterModel] = [] var quickData: [SDFilterModel] = [] let filters: [SDFilterModel] = data self.filterEntries = filters

我的JSON数据如下图所示。现在,我想将商店类型和促销的
合并为一个,用作集合视图数据。我该怎么做

我只是从服务器中过滤响应数据,如下所示:

        var dataBanDau: [SDFilterModel] = []
        var quickData: [SDFilterModel] = []

        let filters: [SDFilterModel] = data

        self.filterEntries = filters

        //let nsarray = NSArray(array: self.filterEntries! , copyItems: true)
//            self.filterEntriesStoreConstant = nsarray as! Array

        self.dataBanDau = filters

        for i in 0..<self.dataBanDau.count {
            if self.dataBanDau[i].search_key.count == 0 {
                self.quickData.append(self.dataBanDau[i])
            }
        }

        self.quickData = self.quickData.filter {
            $0.type != "range"
        }

        DispatchQueue.main.async {
            //Note: Reload TableView
            self.quickFilterCollection.reloadData()
            completed(true)
        }
    }

创建这样的模型

struct Option {
    let name: String
    let searchKey: String
    let id: String
}

struct Model {
    let type: String
    let name: String
    let isExpanded: Bool
    let value: [Option]
}
您应该获得
选项
数组值并加入所有数组

let models:[Model] = //...
let collectionViewArray = models.map { $0.value }.reduce([Option](), +)
用于
循环

var collectionViewArray = [Option]()
for model  in models {
    collectionViewArray.append(contentsOf: model.value)
}

假设您有
让myArray=[1,2,3,4,5,6,7,8]

现在,您需要对数组中的每个元素进行平方运算

有了for循环,你会喜欢这个吗

for item in myArray {
    print(item * item) 
}
现在假设
item=$0

用for映射

myArray.map({ $0 * $0 })
两者的输出相同


映射:用于对数组的每个元素执行相同的操作

let myArr = [[1,2,3],[4,5,6,7]]
flatmap:用于整平数组的数组

let myArr = [[1,2,3],[4,5,6,7]]
您希望o/p为
[1,2,3,4,5,6,7]

因此可以使用
myArr.flatMap({$0})


现在回到你的问题上来

let reqArray = myModel.data.map({ $0.value }).flatMap({ $0 })
首先,
map
为您提供了键数组
值数组
,但您需要一个数组,因此需要使用
flatmap。



您可以选择ref:

显示您的模型结构/类您可以使用
map
。研究map函数可能会有所帮助,但解决方案可能是使用flatMap。
var filterEntries:[SDFilterModel]?
这不应该是
SDFilterModel
。为
filterEntries
创建新的结构类型。检查我的answer@Bad_Developer只需这样做
让reqArray=myModel.data.map({$0.value}).flatMap({$0})
。现在,
reArray
是单个数组中包含
value
键的值。为什么要使用
reduce
?我想,说了些别的。你忘了filter@dahiya_boy我们也可以为此使用
reduce
<代码>[1,2]。减少(0,+)给出
3
。和
[[1],[2]]。reduce([Int](),+)
给出
[1,2]
。仔细阅读问题,OP只需要匹配两个不同值的键的值。