我有一个我想要的结构数组"分解"可以根据需要调用更小的数组,或者至少弄清楚我如何映射一个文本值所需的项目。
结构:
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这样的东西?
答案 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}