arrays - 我如何快速比较两个词典,然后将任何相似之处附加到新词典?

标签 arrays swift uitableview sorting dictionary

我知道这似乎是一个令人困惑的问题,所以这是我的场景...我有两个字典,我需要将它们组织到一个字典中,其中前两个字典中的键共享相同的值与开始的 2 个词典相同。示例:

var dict1 = [1: "fruit", 2: "vegetable", 3: "meat"]
var dict2 = [2: "carrot", 3: "steak", 1: "apple", 3: "pork"] 
var newDict = [1: ["fruit": ["apple"]], 2: ["vegetable": ["carrot"]], 3: ["meat": ["steak, pork"]]]

所以它的组织方式是每个类别(水果、蔬菜、肉类)都有一个唯一的 id (Int),并且在该类别中有一组适合该类别的值。最终结果是,我希望使用类别的部分标题和该部分数据的值数组来使用此数据填充表格 View 。

非常感谢任何帮助。谢谢:)

最佳答案

您的代码无法编译

正如 @Bogdan Farca 在评论中指出的那样,您的第二本词典由于重复键而无法编译

let dict2 = [2: "carrot", 3: "steak", 1: "apple", 3: "pork"]

enter image description here

表示dict2 信息的更好方法正在使用食物名称作为key 类别 IDvalue

let dict2 = ["carrot" : 2,"steak": 2,"apple": 1, "pork":3]

I am assuming the food names to be unique.

更好的名字

为了使代码更具可读性,我们还应该使用更好的名称

let categories = [1: "fruit", 2: "vegetable", 3: "meat"]
let foods = ["carrot" : 2, "steak": 3, "apple": 1, "pork":3]

使用模型

我们终于可以专注于解决方案了。 你想要这样的输出 [Int : Dictionary<String, Array<String>>]

它是字典/数组的复杂组合,为什么不简单地使用模型值呢?

struct FoodCategory {
    let categoryID: Int
    let categoryName: String
    let foods: [String]
}

现在你可以写了

let foodCategories = categories.map { cat -> FoodCategory in
    let foodNames = foods.filter { $0.value == cat.key }.map { $0.0 }
    return FoodCategory(categoryID: cat.key, categoryName: cat.value, foods: foodNames )
}

这是结果

[
    FoodCategory(categoryID: 2, categoryName: "vegetable", foods: ["carrot"]),
    FoodCategory(categoryID: 3, categoryName: "meat", foods: ["pork", "steak"]),
    FoodCategory(categoryID: 1, categoryName: "fruit", foods: ["apple"])
]

关于arrays - 我如何快速比较两个词典,然后将任何相似之处附加到新词典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41481906/

相关文章:

ios - 使用 Uitextfield 进行用户输入,尝试转换为 int,如果不是 int 则返回 0

swift - 我们如何制作和放置一个自定义通知,它会随着更改自定义变量而启动? (在 SwiftUI 或 UIKit 中)

ios - 如何检测对 UITableViewCell 的特定区域/矩形的点击?

java - 生成介于 0 和 y 之间的随机数,x 是在 java 中生成的数量

Python:剪掉numpy数组的外框

ios - 在不创建实例的情况下调用另一个类的方法

swift - 使 UITableViewCell 着色为特定百分比

jquery - 将数据数组传递给 jQuery 函数

C++ 包含字符串和整数的二维数组

ios - 如何禁用 iOS11 中 tableview 单元格的完全滑动