Dictionary iOS-swift 3-嵌套排序和与flatmap、map、filter或formUnion的联合
问题1: 我想使用flatmap、filter、custom unique func或Sets.formUnion实现邻座贴图的并集。对于这个特殊的例子,它是Dictionary iOS-swift 3-嵌套排序和与flatmap、map、filter或formUnion的联合,dictionary,filter,swift3,closures,flatmap,Dictionary,Filter,Swift3,Closures,Flatmap,问题1: 我想使用flatmap、filter、custom unique func或Sets.formUnion实现邻座贴图的并集。对于这个特殊的例子,它是 class Flight{ var name:String? var vocabulary:Vocabulary? } class Vocabulary{ var seatMapPlan:[Plan] = [] var foodPlan:[Plan] = [] } class Plan{ va
class Flight{
var name:String?
var vocabulary:Vocabulary?
}
class Vocabulary{
var seatMapPlan:[Plan] = []
var foodPlan:[Plan] = []
}
class Plan{
var planName:String?
var planId:String?
}
var flightList:[Flight] = []
var plan1 = Plan()
plan1.planId = "planId1"
plan1.planName = "Planname1"
var plan2 = Plan()
plan2.planId = "planId2"
plan2.planName = "Planname2"
var plan3 = Plan()
plan3.planId = "planId3"
plan3.planName = "Planname3"
var plan4 = Plan()
plan4.planId = "planId4"
plan4.planName = "Planname4"
var plan5 = Plan()
plan5.planId = "planId5"
plan5.planName = "Planname5"
var plan6 = Plan()
plan6.planId = "planId6"
plan6.planName = "Planname6"
var flight1 = Flight()
flight1.name = "Flight1"
flight1.vocabulary = Vocabulary()
flight1.vocabulary?.seatMapPlan = [plan1, plan2]
flight1.vocabulary?.foodPlan = [plan3, plan4, plan5]
var flight2 = Flight()
flight2.name = "Flight2"
flight2.vocabulary = Vocabulary()
flight2.vocabulary?.seatMapPlan = [plan2, plan3]
flight2.vocabulary?.foodPlan = [plan3, plan4, plan5]
flightList=[flight1, flight2]
由于在回答问题的帮助下筑巢,我无法做到这一点。
请给我一个过滤器,平面图和地图的组合来解决这个特殊的问题
问题2:
如果我必须根据选择的计划(计划1或多个)对该阵列飞行列表进行排序,则我也会遇到相反的情况。我想根据过滤器和映射对其进行排序,但嵌套使其难以实现。
e、 g.1:
如果seatMapPlan的搜索参数为plan1。然后结果是flight1
e、 g.2:
如果seatMapPlan的搜索参数是plan2。然后结果是flight1,flight2。对于第一个问题,我将使用集合。因此,首先制定
计划
实施可散列
:
seatMapUnion = [plan1,plan2,plan3]
那么就很简单了:
class Plan : Hashable {
var planName:String?
var planId:String?
public var hashValue: Int { return planName?.hashValue ?? 0 }
public static func ==(lhs: Plan, rhs: Plan) -> Bool { return lhs.planId == rhs.planId }
}
我不确定我是否理解您的第二个问题。var planArray=flightlList.flatMap{$0.词汇表!.seatMapPlan};var unionArray=Array(Set(planArray))帮个忙,添加带有参数的init方法。Gnasher729在实际环境中,它们是json解析的,高度嵌套的。这只是为了提问。
let set1 = Set<Plan>(flight1.vocabulary!.seatMapPlan)
let set2 = Set<Plan>(flight2.vocabulary!.seatMapPlan)
let union = set1.union(set2)
print(union.map { $0.planName! } )
["Planname2", "Planname1", "Planname3"]