簡體   English   中英

如何轉換數組數組的元組&lt;(鍵:字符串,值:數組<Chat> )&gt; 到數組字典字典<String, Array<Chat> &gt;?

[英]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>>

其中 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)])]

只需映射數組,但是由於兩種集合類型都不相關,因此您必須使用循環或forEach

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

如果您確定鍵是唯一的,則可以使用Dictionaryinit(uniqueKeysAndValues:)初始化程序:

Dictionary(uniqueKeysWithValues: yourArrayOfTuples)

如果您不確定鍵是否唯一,您可以使用init(keysAndValues:uniquingKeysWith:)並提供一個函數來處理重復鍵:

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

您可以使用reduce ,如果多個元組存在一個鍵,則相應的數組將被合並。

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

另一方面,如果您知道所有鍵都是唯一的,則可以將 reduce 簡化為

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM