通过取两个具有相同日期的对象来过滤对象数组

时间:2018-05-30 09:33:44

标签: ios swift

我试图在某些条件下过滤对象数组:

filtered_shifts = myShifts.filter{$0.regionName == region && $0.cityName == city && $0.idNationality == idn && $0.quantityStaff != 0 && $0.shiftDate > todaydate}

我想更多地过滤它,如果有一个shiftType ==“night”和shiftType ==“day”为同一个shiftDate然后添加到我的过滤的移位数组。

  

如果相同日期有shift类型= day AND type = night,则将其添加到我的过滤数组

我怎样才能实现这一目标?

例如

让我们说

   myShifts = {
       "id": 50,
        "id_region": 1,
        "id_city": 2,
        "id_nationality": 3,
        "id_service": 1,
        "shift_date": "2018-06-06 00:00:00",
        "shift_type": "day",
        "weekday": "wed",
        "quantity_staff": 5,
        "lead_hours": 3,
        "created_at": "2018-05-13 16:27:21",
        "updated_at": "2018-05-13 16:27:21",
        "deleted_at": null,
        "city_name": "Khobar",
        "region_name": "Eastren"
    },
    {
        "id": 70,
        "id_region": 1,
        "id_city": 1,
        "id_nationality": 3,
        "id_service": 1,
        "shift_date": "2018-06-06 00:00:00",
        "shift_type": "day",
        "weekday": "wed",
        "quantity_staff": 12,
        "lead_hours": 3,
        "created_at": "2018-05-21 14:03:02",
        "updated_at": "2018-05-21 14:03:02",
        "deleted_at": null,
        "city_name": "Dammam",
        "region_name": "Eastren"
    },
    {
        "id": 74,
        "id_region": 1,
        "id_city": 1,
        "id_nationality": 3,
        "id_service": 1,
        "shift_date": "2018-06-06 00:00:00",
        "shift_type": "night",
        "weekday": "wed",
        "quantity_staff": 20,
        "lead_hours": 3,
        "created_at": "2018-05-21 14:40:56",
        "updated_at": "2018-05-21 14:40:56",
        "deleted_at": null,
        "city_name": "Dammam",
        "region_name": "Eastren"
    },
    {
        "id": 4,
        "id_region": 1,
        "id_city": 1,
        "id_nationality": 4,
        "id_service": 1,
        "shift_date": "2018-05-15 00:00:00",
        "shift_type": "night",
        "weekday": "tue",
        "quantity_staff": 5,
        "lead_hours": 2,
        "created_at": "2018-04-23 11:46:20",
        "updated_at": "2018-05-15 10:33:29",
        "deleted_at": null,
        "city_name": "Dammam",
        "region_name": "Eastren"
    }

我想:

 filtered_Shifts =  {
        "id": 70,
        "id_region": 1,
        "id_city": 1,
        "id_nationality": 3,
        "id_service": 1,
        "shift_date": "2018-06-06 00:00:00",
        "shift_type": "day",
        "weekday": "wed",
        "quantity_staff": 12,
        "lead_hours": 3,
        "created_at": "2018-05-21 14:03:02",
        "updated_at": "2018-05-21 14:03:02",
        "deleted_at": null,
        "city_name": "Dammam",
        "region_name": "Eastren"
    },
    {
        "id": 74,
        "id_region": 1,
        "id_city": 1,
        "id_nationality": 3,
        "id_service": 1,
        "shift_date": "2018-06-06 00:00:00",
        "shift_type": "night",
        "weekday": "wed",
        "quantity_staff": 20,
        "lead_hours": 3,
        "created_at": "2018-05-21 14:40:56",
        "updated_at": "2018-05-21 14:40:56",
        "deleted_at": null,
        "city_name": "Dammam",
        "region_name": "Eastren"
    },

在2018-06-06日期,有shift_type = night AND day ...

1 个答案:

答案 0 :(得分:0)

import Foundation

struct MyShifts: Codable {
    let id :Int
    let id_region: Int
    let id_city: Int
    let id_nationality: Int
    let id_service: Int
    let shift_date: String
    let shift_type: String
    let weekday: String
    let quantity_staff : Int
    let lead_hours: Int
    let created_at: String
    let updated_at: String
    let deleted_at:String
    let city_name: String
    let region_name: String
}



let myShifts = """
[{
"id": 50,
"id_region": 1,
"id_city": 2,
"id_nationality": 3,
"id_service": 1,
"shift_date": "2018-06-06 00:00:00",
"shift_type": "day",
"weekday": "wed",
"quantity_staff": 5,
"lead_hours": 3,
"created_at": "2018-05-13 16:27:21",
"updated_at": "2018-05-13 16:27:21",
"deleted_at": "2018-05-13 16:27:21",
"city_name": "Khobar",
"region_name": "Eastren"
    },
{
    "id": 70,
    "id_region": 1,
    "id_city": 1,
    "id_nationality": 3,
    "id_service": 1,
    "shift_date": "2018-06-06 00:00:00",
    "shift_type": "day",
    "weekday": "wed",
    "quantity_staff": 12,
    "lead_hours": 3,
    "created_at": "2018-05-21 14:03:02",
    "updated_at": "2018-05-21 14:03:02",
    "deleted_at": "2018-05-15 10:33:29",
    "city_name": "Dammam",
    "region_name": "Eastren"
},
{
    "id": 74,
    "id_region": 1,
    "id_city": 1,
    "id_nationality": 3,
    "id_service": 1,
    "shift_date": "2018-06-06 00:00:00",
    "shift_type": "night",
    "weekday": "wed",
    "quantity_staff": 20,
    "lead_hours": 3,
    "created_at": "2018-05-21 14:40:56",
    "updated_at": "2018-05-21 14:40:56",
    "deleted_at": "2018-05-15 10:33:29",
    "city_name": "Dammam",
    "region_name": "Eastren"
},
{
    "id": 4,
    "id_region": 1,
    "id_city": 1,
    "id_nationality": 4,
    "id_service": 1,
    "shift_date": "2018-05-15 00:00:00",
    "shift_type": "night",
    "weekday": "tue",
    "quantity_staff": 5,
    "lead_hours": 2,
    "created_at": "2018-04-23 11:46:20",
    "updated_at": "2018-05-15 10:33:29",
    "deleted_at": "2018-05-15 10:33:29",
    "city_name": "Dammam",
    "region_name": "Eastren"
}]
""".data(using: .utf8)! // our native (JSON) data

let myShiftsObjectArray = try JSONDecoder().decode([MyShifts].self, from: myShifts) // decoding our data
myShiftsObjectArray.forEach { print($0) } // decoded!
var Dates = Set<String>()
var uniqueArray = [MyShifts]()
for shift in myShiftsObjectArray {
    if !Dates.contains(shift.shift_date) {
        uniqueArray.append(shift)
        Dates.insert(shift.shift_date)
    }
}

print(uniqueArray.count)
var NewFilteredShifts = NSMutableArray()
for loop in uniqueArray
{
    for loopAll in myShiftsObjectArray
    {
        if loop.shift_date == loopAll.shift_date && !NewFilteredShifts.contains(loopAll)
        {
             if loopAll.region_name == "Eastren" && loopAll.city_name == "Dammam" && loopAll.id_nationality == 4 && loopAll.quantity_staff != 0 && (loopAll.shift_type == "day" || loopAll.shift_type == "night")
            {
                NewFilteredShifts.add(loopAll)

            }
        }

    }
}
print(NewFilteredShifts)

我希望这会帮助你。