swift - 如何将值与 NSdictionary 的相似键合并

标签 swift nsdictionary

你好,我有这样的情况,我得到了这样的服务器原始响应

(
    {
        "Nov 2018" =         {
            AudioFileURL = "https://www.GeorgeA.m4a";
            AudioFileText = "GeorgeA";
        };
    },

    {
        "Nov 2018" =         {
            AudioFileURL = "https://www.GeorgeB.m4a";
            AudioFileText = "Georgeb";
        };
    },
    {
        "Nov 2018" =         {
            AudioFileURL = "https://www.Georgec.m4a";
            AudioFileText = "Georgec";
        };
    },
    {
        "Sep 2018" =         {
            AudioFileURL = "https://www.GeorgeB.m4a";
            AudioFileText = "GeorgeD";


        };
    }
)

现在我想将所有值与相同的键结合起来,以便我可以在 UITableView Controller 的部分中使用它们。有人可以为此提供一些指导吗。

我正在寻找的输出是这样的

(
{
        "Nov 2018" = {        
            [AudioFileURL = "https://www.GeorgeA.m4a";
            AudioFileText = "GeorgeA"],

            [AudioFileURL = "https://www.GeorgeB.m4a";
            AudioFileText = "GeorgeB"],

            [AudioFileURL = "https://www.GeorgeC.m4a";
            AudioFileText = "GeorgeC"];

        };
    },
{
        "Sep 2018" =         {
            [AudioFileURL = "https://www.GeorgeB.m4a";
            AudioFileText = "GeorgeD";]


        };
}
)

最佳答案

首先在一个单元格中创建一个表示您想要的信息的结构:

struct AudioFileInfo {
    let urlString: String
    let text: String

    init(dict: [String: String]) {
        urlString = dict["AudioFileURL"] ?? ""
        text = dict["AudioFileText"] ?? ""
    }
}

struct CellInfo {
    let date: String
    let audioFileInfos: [AudioFileInfo]
}

然后你可以:

let cellInfos = response
    .flatMap {
        $0.map { ($0.key, AudioFileInfo(dict: $0.value)) }
    }
    .reduce([CellInfo]()) { partial, item in
        var new = partial
        if let index = partial.index(where: { $0.date == item.0 }) {
            new[index] = CellInfo(date: partial[index].date, audioFileInfos: partial[index].audioFileInfos + [item.1])
        }
        else {
            new.append(CellInfo(date: item.0, audioFileInfos: [item.1]))
        }
        return new
    }

这将为您提供一组 CellInfo 对象。

作为一般规则,这就是您解决此类问题的方式。首先定义一个表示所需输出的类型,然后操作输入,直到创建该类型的对象。 Playground 是这类事情的 friend 。

关于swift - 如何将值与 NSdictionary 的相似键合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53502339/

相关文章:

ios - 刷新后保持表格单元格删除而不触及数据库中的帖子

swift - 通过移走 TableView 使 ViewController 更 slim

ios - 无法满足 UILabel 对动态 UITableViewCell 的 ContentView 的底部约束

ios - Xcode 在将 iOS 应用程序上传到 App Store 时尝试匹配框架包 ID

macos - 透明背景WKWebView(NSView)

ios - 如何创建类似 UITableView 结构的树?

iphone - 应用程序在访问 NSDictionary 的值时崩溃但在访问其键时不崩溃?

ios - 访问 NSMutableArray 对象以在 TableView 上使用

iphone - 使用自定义 NSObject 类来简化 iPhone 应用程序中的重复代码时遇到问题

ios - 在 NSDictionary* 类型的对象上找不到读取数组元素的预期方法