首页 文章

swift - 在struct数组上使用.map

提问于
浏览
3

我有一个结构数组,我希望“分解”成更小的数组,可以根据需要调用,或至少弄清楚我如何映射一个文本值所需的项目 .

结构:

struct CollectionStruct {
    var name : String
    var description : String
    var title : String
    var image : PFFile
    var id: String
}

以及由struct构成的数组

var collectionArray = [CollectionStruct]()

var i = 0
for item in collectionArray {
    print(collectionArray[i].name)    
    i += 1  
}

print partArray [i] .name给出以下结果:

pk00_pt01
pk00_pt02
pk00_pt03
pk01_pt01
pk01_pt02
pk01_pt03
pk01_pt04
pk01_pt05
pk01_pt06
pk01_pt07
pk01_pt08

这只是一些测试值,但这里可能有成千上万的条目,所以我想通过[i] .name的前4个字符来过滤整个数组我可以通过如上所述的循环来实现这一点,但这是可以实现的 . Map ?

3 回答

  • 0

    不确定我是否正确理解你,但听起来你正在寻找这个......

    要从已存在的名为 collectionArray 的数组(类型为CollectionStruct)创建名为 partArray 的新数组,您可以...

    var partArray = collectionArray.map{$0.name}

  • 1

    我想通过[i] .name的前4个字符过滤整个数组

    您可以通过基于 namesubstring 值过滤数组来实现此目的,如下所示:

    let filteredArray = collectionArray.filter {
        $0.name.substring(to: $0.name.index($0.name.startIndex, offsetBy: 4)).lowercased() == "pk00"
        // or instead of "pk00", add the first 4 characters you want to compare
    }
    

    filteredArray 将根据比较的字符串填充 .

    希望这有帮助 .

  • 4

    如果要按名称前缀自动对所有数据进行分组 . 您可以使用reducer生成分组项的字典 . 像这样的东西:

    let groupedData = array.reduce([String: [String]]()) { (dictionary, myStruct) in
        let grouper = myStruct.name.substring(to: myStruct.name.index(myStruct.name.startIndex, offsetBy: 4))
        var newDictionart = dictionary
        if let collectionStructs = newDictionart[grouper] {
            newDictionart[grouper] = collectionStructs + [myStruct.name]
        } else {
            newDictionart[grouper] = [myStruct.name]
        }
        return newDictionart
    }
    

    这将产生一个这样的字典:

    [
        "pk00": ["pk00_pt01", "pk00_pt02", "pk00_pt03"],
        "pk01": ["pk01_pt01", "pk01_pt02", "pk01_pt03", "pk01_pt04", "pk01_pt05", "pk01_pt06", "pk01_pt07"],
        "pk02": ["pk02_pt08"]
    ]
    

相关问题