【问题标题】:Obtain a subset of tuple array in swift快速获取元组数组的子集
【发布时间】:2016-04-13 19:58:14
【问题描述】:

我有一个元组数组,如下所示

var customProducts = [(productType: String, info:[String:AnyObject?])]

参数“productType”的作用类似于“产品类别”,如水果、谷物、饮料等。

参数“info”是产品的营养信息字典。

我想根据 productType 获取元组数组的子集,这样我就可以获得特定 productType 的“信息”字典。在 C# 中,我会尝试使用 Linq 进行以下操作:

var fruits = customProducts.Where(q=>q.productType == "fruit").Select(q => q.info) as List<KeyValuePair<string, object>>;

如何使用 Swift (2.x) 归档相同的结果?

谢谢!

【问题讨论】:

    标签: arrays swift generics swift2


    【解决方案1】:

    我认为 Swift 的等价物是:

    let fruits = customProducts.filter { $0.productType == "fruit" }.map { $0.info }
    

    这里fruits[[String : AnyObject?]],一个字典数组(info 数组,如果我没记错的话,和你的List&lt;KeyValuePair&lt;string, object&gt;&gt; 一样)。

    【讨论】:

    • 工作完全符合我的需要!谢谢!
    【解决方案2】:

    可以使用过滤方法

    let beverageInfo = (customProducts.filter { $0.productType == "Beverage" }).first?.info
    

    现在beverageInfo[String : AnyObject?]?,表示“饮料”元组信息的可选字典。

    【讨论】:

    • “first”属性是否像 C# 中的“First()”方法一样工作?
    【解决方案3】:

    你应该根据产品的类型来过滤数组

    例如

    var customProducts = [(productType: String, info:[String:AnyObject?])]
    
    let fruitProducts = customProducts.filter { product in 
        if product.productType == "fruit" {
            return true
        } else {
            return false
        }
    }.map { $0.info }
    

    然后你可以随心所欲地使用fruitProducts。

    【讨论】:

    • 你的if语句有以下逻辑:如果条件返回真,则返回真。如果条件返回 false,则返回 false。你可以直接返回product.productType == "fruit" ;)
    • 是的,你是对的,我对编码还比较陌生(4/5 个月),所以我正确的方式很冗长,但对我来说更有意义。以后我会尽量简洁。谢谢你的提示!
    猜你喜欢
    • 2021-12-24
    • 2017-02-23
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    相关资源
    最近更新 更多