Ios 从Swift 5中的数组创建字典

Ios 从Swift 5中的数组创建字典,ios,arrays,swift,dictionary,Ios,Arrays,Swift,Dictionary,我需要从数组中为数组的第一个索引创建一个自定义类型的字典 样本数组:[ABC,ZYZ,123] 所需结果:[{name:ABC,type:A},{name:ZYZ,type:B},{name:123,type:B}] 注意第一个索引的类型A 我的代码 for url in urlArray { urlDict["name"] = url } 使用map:将数组的每个元素转换为字典,如下所示: 使用map:将数组的每个元素转换为字典,如下所示: 我想您可以使用高阶函数,如

我需要从数组中为数组的第一个索引创建一个自定义类型的字典

样本数组:[ABC,ZYZ,123]

所需结果:[{name:ABC,type:A},{name:ZYZ,type:B},{name:123,type:B}]

注意第一个索引的类型A

我的代码

for url in urlArray {
        urlDict["name"] = url
    }
使用map:将数组的每个元素转换为字典,如下所示:

使用map:将数组的每个元素转换为字典,如下所示:


我想您可以使用高阶函数,如map或reduce

下面是一个使用reduce的示例

结果是:

[[类型:A,名称:ABC],[类型:B,名称:ZYZ],[名称: 123,类型:B]]


我想您可以使用高阶函数,如map或reduce

下面是一个使用reduce的示例

结果是:

[[类型:A,名称:ABC],[类型:B,名称:ZYZ],[名称: 123,类型:B]]

您可以进行映射,然后分别更改第一个词典的类型:

var dicts = urlArray.map { ["name": $0, "type": "B"] }
dicts[0]["type"] = "A"
let resultDict: [String: String]
      = array.reduce(into: [:]) { dict, url in
        dict["name"] = url
      }
看看你所有的字典键都是一样的,并且你正在把它发送到服务器,一个可编码的结构可能是一个更好的选择

struct NameThisProperly : Codable {
    var name: String
    var type: String
}

var result = urlArray.map { NameThisProperly(name: $0, type: "B") }
result[0].type = "A"
do {
    let data = try JSONDecoder().encode(result)
    // you can now send this data to server
} catch let error {
    ...
}
您可以进行映射,然后分别更改第一个词典的类型:

var dicts = urlArray.map { ["name": $0, "type": "B"] }
dicts[0]["type"] = "A"
let resultDict: [String: String]
      = array.reduce(into: [:]) { dict, url in
        dict["name"] = url
      }
看看你所有的字典键都是一样的,并且你正在把它发送到服务器,一个可编码的结构可能是一个更好的选择

struct NameThisProperly : Codable {
    var name: String
    var type: String
}

var result = urlArray.map { NameThisProperly(name: $0, type: "B") }
result[0].type = "A"
do {
    let data = try JSONDecoder().encode(result)
    // you can now send this data to server
} catch let error {
    ...
}

因为您关心索引,所以我的方法将使用枚举,它给出索引

让数组=[ABC,ZYZ,123] 变量结果:[[String:String]=[] 对于i,枚举数组中的内容{ 让类型:String=i==0?A:B results.append[名称:内容,类型:类型] } 打印结果 //[[类型:A,名称:ABC],[名称:ZYZ,类型:B],[类型:B,名称:123]]
因为您关心索引,所以我的方法将使用枚举,它给出索引

让数组=[ABC,ZYZ,123] 变量结果:[[String:String]=[] 对于i,枚举数组中的内容{ 让类型:String=i==0?A:B results.append[名称:内容,类型:类型] } 打印结果 //[[类型:A,名称:ABC],[名称:ZYZ,类型:B],[类型:B,名称:123]] 使用reduce将数组转换为字典:

var dicts = urlArray.map { ["name": $0, "type": "B"] }
dicts[0]["type"] = "A"
let resultDict: [String: String]
      = array.reduce(into: [:]) { dict, url in
        dict["name"] = url
      }
结果如下所示:

[
  "name": URL1,
  "name": URL2
]
使用reduce将数组转换为字典:

var dicts = urlArray.map { ["name": $0, "type": "B"] }
dicts[0]["type"] = "A"
let resultDict: [String: String]
      = array.reduce(into: [:]) { dict, url in
        dict["name"] = url
      }
结果如下所示:

[
  "name": URL1,
  "name": URL2
]

这里的逻辑是什么?为什么第一个字典的类型是:A,而其他字典的类型是:B?数组的第一个索引需要分别发送到服务器。所以它总是第一个索引?数组的内容是什么并不重要,对吧?这里的逻辑是什么?为什么第一个字典的类型是:A,而其他字典的类型是:B?数组的第一个索引需要分别发送到服务器。所以它总是第一个索引?数组的内容是什么并不重要,对吧?堆栈溢出时不鼓励只使用代码的答案,因为它们没有解释它是如何解决问题的。请编辑您的答案,以解释此代码的作用以及它如何回答问题,以便对OP以及具有类似问题的其他用户有用。对于堆栈溢出,不建议使用纯代码答案,因为它们不会解释此代码如何解决问题。请编辑您的答案,以解释此代码的作用以及它如何回答问题,以便对OP以及具有类似问题的其他用户有用。