【问题标题】:How to convert Tuple of array of Array<(key: String, value: Array<Chat>)> to Dictionary of arrays Dictionary<String, Array<Chat>>?如何将 Array<(key: String, value: Array<Chat>)> 数组的元组转换为数组字典 Dictionary<String, Array<Chat>>?
【发布时间】:2020-02-01 10:50:20
【问题描述】:

我的表格中有我的数据

Array<(key: String, value: Array<Chat>)>

我想把它转换成

Dictionary<String, Array<Chat>>

其中 Chat 是一个数组。

这是我的数据:-

[(key: "2020-01-27", value: [Unilife.Chat(id: Optional(840), roomID: Optional("5010682260"), message: Optional("Hello"), thumb: nil, filepath: nil, senderID: Optional(658), receiverID: Optional(777), groupID: nil, chatID: nil, date: Optional("2020-01-27 10:09:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-27"), createdAt: Optional("2020-01-27T10:09:31.000Z"), updatedAt: Optional("2020-01-27T10:09:44.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0), Unilife.Chat(id: Optional(841), roomID: Optional("5010682260"), message: Optional("Kjjhhbbb"), thumb: nil, filepath: nil, senderID: Optional(777), receiverID: Optional(658), groupID: nil, chatID: nil, date: Optional("2020-01-27 10:09:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-27"), createdAt: Optional("2020-01-27T10:09:44.000Z"), updatedAt: Optional("2020-01-27T11:02:07.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0)]), (key: "2020-01-28", value: [Unilife.Chat(id: Optional(842), roomID: Optional("5010682260"), message: Optional("Unilife158029258648577759581565958156.m4a"), thumb: Optional(""), filepath: Optional(""), senderID: Optional(777), receiverID: Optional(658), groupID: nil, chatID: nil, date: Optional("2020-01-28 10:09:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("audio"), onlyDate: Optional("2020-01-28"), createdAt: Optional("2020-01-28T10:09:49.000Z"), updatedAt: Optional("2020-01-28T11:02:07.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0), Unilife.Chat(id: Optional(843), roomID: Optional("5010682260"), message: Optional("Hee"), thumb: nil, filepath: nil, senderID: Optional(658), receiverID: Optional(777), groupID: nil, chatID: nil, date: Optional("2020-01-28 11:02:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-28"), createdAt: Optional("2020-01-28T11:02:07.000Z"), updatedAt: Optional("2020-01-28T11:22:21.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0)]), (key: "2020-01-29", value: [Unilife.Chat(id: Optional(844), roomID: Optional("5010682260"), message: Optional("Dasdasd"), thumb: nil, filepath: nil, senderID: Optional(658), receiverID: Optional(777), groupID: nil, chatID: nil, date: Optional("2020-01-29 12:10:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-29"), createdAt: Optional("2020-01-29T12:10:32.000Z"), updatedAt: Optional("2020-01-29T12:10:43.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0), Unilife.Chat(id: Optional(848), roomID: Optional("5010682260"), message: Optional("Hgchchc"), thumb: nil, filepath: nil, senderID: Optional(658), receiverID: Optional(777), groupID: nil, chatID: nil, date: Optional("2020-01-29 12:11:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-29"), createdAt: Optional("2020-01-29T12:11:34.000Z"), updatedAt: Optional("2020-01-29T12:11:38.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0), Unilife.Chat(id: Optional(849), roomID: Optional("5010682260"), message: Optional("Jjjhvjhv"), thumb: nil, filepath: nil, senderID: Optional(658), receiverID: Optional(777), groupID: nil, chatID: nil, date: Optional("2020-01-29 12:11:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-29"), createdAt: Optional("2020-01-29T12:11:45.000Z"), updatedAt: Optional("2020-01-29T12:12:18.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0), Unilife.Chat(id: Optional(850), roomID: Optional("5010682260"), message: Optional("Rr"), thumb: nil, filepath: nil, senderID: Optional(658), receiverID: Optional(777), groupID: nil, chatID: nil, date: Optional("2020-01-29 12:11:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-29"), createdAt: Optional("2020-01-29T12:11:50.000Z"), updatedAt: Optional("2020-01-29T12:12:18.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0), Unilife.Chat(id: Optional(851), roomID: Optional("5010682260"), message: Optional("Hello"), thumb: nil, filepath: nil, senderID: Optional(658), receiverID: Optional(777), groupID: nil, chatID: nil, date: Optional("2020-01-29 12:12:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-29"), createdAt: Optional("2020-01-29T12:12:14.000Z"), updatedAt: Optional("2020-01-29T12:12:18.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0), Unilife.Chat(id: Optional(852), roomID: Optional("5010682260"), message: Optional("H"), thumb: nil, filepath: nil, senderID: Optional(658), receiverID: Optional(777), groupID: nil, chatID: nil, date: Optional("2020-01-29 12:28:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-29"), createdAt: Optional("2020-01-29T12:28:39.000Z"), updatedAt: Optional("2020-01-29T12:30:32.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0)]), (key: "2020-01-30", value: [Unilife.Chat(id: Optional(853), roomID: Optional("5010682260"), message: Optional("Jhffjh"), thumb: nil, filepath: nil, senderID: Optional(658), receiverID: Optional(777), groupID: nil, chatID: nil, date: Optional("2020-01-30 12:28:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-30"), createdAt: Optional("2020-01-30T12:28:45.000Z"), updatedAt: Optional("2020-01-30T12:30:32.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0), Unilife.Chat(id: Optional(855), roomID: Optional("5010682260"), message: Optional("Svsvvsvs"), thumb: nil, filepath: nil, senderID: Optional(658), receiverID: Optional(777), groupID: nil, chatID: nil, date: Optional("2020-01-30 12:49:00"), seen: Optional("1"), isDeleted: Optional("00"), deleteChatID: Optional("0"), messageType: Optional("text"), onlyDate: Optional("2020-01-30"), createdAt: Optional("2020-01-30T12:49:42.000Z"), updatedAt: Optional("2020-01-30T12:50:11.000Z"), senderUserChat: nil, chatSlide: nil, isPlaying: false, currentDuration: 0.0)])]

【问题讨论】:

    标签: ios arrays swift dictionary


    【解决方案1】:

    只需 map 数组,但是由于两种集合类型不相关,您必须使用循环或forEach

    var dictionary = [String:[Chat]]()
    array.forEach{ dictionary[$0.key] = $0.value }
    

    【讨论】:

      【解决方案2】:

      如果您确定密钥是唯一的,您可以使用 Dictionaryinit(uniqueKeysAndValues:) 初始化程序:

      Dictionary(uniqueKeysWithValues: yourArrayOfTuples)
      

      如果不确定key是否唯一,可以使用init(keysAndValues:uniquingKeysWith:)并提供处理重复key的函数:

      Dictionary(yourArrayOfTuples, uniquingKeysWith: {
          value1, value2 in
          // return which value you would like
      })
      

      【讨论】:

        【解决方案3】:

        您可以使用reduce,如果存在多个元组的键,则合并相应的数组。

        let dict = array.reduce(into: [:]) {
            $0[$1.key, default: []].append(contentsOf: $1.value)
        }
        

        另一方面,如果您知道所有键都是唯一的,则可以将化简简化为

        let dict = array.reduce(into: [:]) {
            $0[$1.key] = $1.value
        }
        

        【讨论】:

          猜你喜欢
          • 2020-03-13
          • 2013-01-23
          • 1970-01-01
          • 2019-11-23
          • 2020-12-07
          • 1970-01-01
          • 2019-03-30
          • 2015-08-12
          • 1970-01-01
          相关资源
          最近更新 更多