Swift:如何使用单线减少 Set 中的一些子元素?

Posted

技术标签:

【中文标题】Swift:如何使用单线减少 Set 中的一些子元素?【英文标题】:Swift: how to reduce some sub-elements in a Set with a one-liner? 【发布时间】:2021-11-27 22:58:27 【问题描述】:

我有这个模型:

struct Class 
    var field: [String: Field]


struct Field 
    var type: String

还有这个数组:

let classes: [Class] = [
    Class(field: ["test": Field(type: "STRING"),
                  "test2": Field(type: "STRING"), 
                  "test3": Field(type: "NUMBER")]),
    Class(field: ["test": Field(type: "POINTER"),
                  "test2": Field(type: "STRING"), 
                  "test3": Field(type: "STRING")]),
]

我想减少一组字符串中的所有types 属性,我试过这个:

let result = classes.map  $0.field.reduce([],  $0 + $1.value.type ) 

但不是得到一组字符串:

我想得到什么

“字符串”、“数字”、“指针”

我得到一个字符数组:

[[“S”、“T”、“R”、“I”、“N”、“G”、“N”、“U”、“M”、“B”....]]

我应该写什么呢?谢谢你的帮助

【问题讨论】:

能否请您提供您的示例输入数据和您想要的输出? @jnpdx 谢谢你的回答,我已经编辑了我的问题。 【参考方案1】:

您可以使用flatMap 来展平值数组,然后使用Set 去除非唯一值:

let result = Set(classes.flatMap  $0.field.values .map  $0.type )

如果您需要Array 而不是Set,您可以简单地将上面的内容包装在Array()

【讨论】:

以上是关于Swift:如何使用单线减少 Set 中的一些子元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用子元组从元组创建列表?

如何将 Pig 元组拆分为子元组?

如何从具有子元组的元组创建列表?

减少数组以在 Swift 中设置

如何使用 Swift 通过代码库增加和减少 UIView 高度

如何使用Swift 2删除Strings中的多个空格