【发布时间】:2018-11-12 09:59:51
【问题描述】:
假设我有如下数据。
[
{
hotelName : "Hotel 1",
hotelType : 1
prices :
[
{
roomType: "Single Room",
price : 1231
},
{
roomType: "Twin Room",
price : 1232
},
{
roomType: "Triple Room",
price : 1233
}
]
},
{
hotelName : "Hotel 2",
hotelType : 2
prices :
[
{
roomType: "Single Room",
price : 1241
},
{
roomType: "Twin Room",
price : 1242
},
{
roomType: "Triple Room",
price : 1243
}
]
}
]
我有另一个过滤器数组,格式如下。
[
{
"roomType": "Single Room"
},
{
"roomType": "Twin Room"
}
]
我想要的是获得以上类型的房间。
我正在尝试以下方式,但停留在以下点。
finalArray = finalArray.filter() {
hotelInfo in
hotelInfo.prices!.roomType!==(
// compare for roomType from another array
)
}
有人能指出我正确的方向吗?
我的结构如下。
struct Hotels: Encodable, Decodable {
var hotelName: String?
var hotelType: Int?
var prices: [RoomPrices]?
}
struct RoomPrices: Encodable, Decodable {
var roomType: String?
var price: Double?
}
对于过滤器,我有如下模型
struct RoomFilter: Decodable {
var roomType: String?
}
价格仅作为 1 个字典
[
{
hotelName : "Hotel 1",
hotelType : 1
prices :
{
roomType: "Single Room",
price : 1231
}
},
{
hotelName : "Hotel 2",
hotelType : 2
prices :
{
roomType: "Twin Room",
price : 1242
}
}
]
更新的结构将是
struct Hotels: Encodable, Decodable {
var hotelName: String?
var hotelType: Int?
var prices: RoomPrices?
}
struct RoomPrices: Encodable, Decodable {
var roomType: String?
var price: Double?
}
【问题讨论】:
-
所以你想要一个
Dictionary,其键为roomTypes,其值为roomTypes所在的房间?在任何情况下,您都应该在问题中包含数据结构而不是显示 JSON,因为在查看实际类型而不是其 JSON 表示时生成工作代码更容易。 -
@DávidPásztor :我想要与第一个数组相同的数组,但从第二个数组中过滤...我有主数组,我想获得满足第二个数组数据的酒店...所以我们要检查的是mainArray.prices.roomType 包含 roomFilter.roomType 我已经用我拥有的模型更新帖子...
-
所以您只想过滤
[Hotels]以仅包括所有房间类型都存储在[RoomFilter]中的酒店?您是否还想过滤掉Hotels的prices数组,或者保留所有房间,即使是[RoomFilter]中不存在的房间?一些通用建议:您应该使用单数形式命名您的类型,因为单个Hotel实例代表 1 个Hotel,而不是多个,与RoomPrices相同。将 all 属性标记为可选和可变也是没有意义的。除非您有充分的理由不这样做,否则将所有内容声明为不可变和可选。 -
@DávidPásztor : 过滤一个 [Hotels] 以仅包括在 [RoomFilter] 中存储有任何个房间类型的酒店?