swift - 在struct array

时间:2017-01-10 21:49:52

标签: arrays swift struct

我有一个我想要的结构数组"分解"可以根据需要调用更小的数组,或者至少弄清楚我如何映射一个文本值所需的项目。

结构:

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

和结构

组成的数组
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]的前4个字符来过滤整个数组。我可以通过如上所述的循环实现这一点,但是这是可以实现的使用像.map这样的东西?

3 个答案:

答案 0 :(得分:4)

  

我想通过前4个字符过滤整个数组   [I]。名称

您可以根据substring的{​​{1}}值过滤来实现此目的,如下所示:

name

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 } 将根据比较的字符串填充。

希望这会有所帮助。

答案 1 :(得分:1)

如果要按名称前缀自动分组所有数据。您可以使用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"]
]

答案 2 :(得分:0)

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

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

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