Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如果属性值存在于另一个对象数组中,则筛选对象数组_Arrays_Swift_Object_Filter - Fatal编程技术网

Arrays 如果属性值存在于另一个对象数组中,则筛选对象数组

Arrays 如果属性值存在于另一个对象数组中,则筛选对象数组,arrays,swift,object,filter,Arrays,Swift,Object,Filter,我有两个对象数组,如下所示: 会议室建议: init(suggestionReason: String, organizerAvailability: String, startTime: String, endTime: String, dStart: Date, availability: String, emailAddress: String, displayName: String, roomEmail: String, occupancy: Int, building: String

我有两个对象数组,如下所示:

会议室建议

init(suggestionReason: String, organizerAvailability: String,
startTime: String, endTime: String, dStart: Date, availability: String,
emailAddress: String, displayName: String, roomEmail: String,
occupancy: Int, building: String)
预订

init(startTime: String, endTime: String, dStart: Date, organizer :
String, location : String, subject : String)
如果
dStart
属性存在于
Bookings
数组中,我希望能够从数组中筛选/排除
MeetingRoomSuggestion
对象

我的代码:

  let filteredArr = meetingRoomSuggestions.filter { meeting in
        return bookingArray!.contains(where: { booking in
            return booking.dStart == meeting.dStart
        })
    }
我还尝试对开始字符串进行过滤,这两个字符串都是相同的。 当我在过滤之前打印出两个数组时,您可以清楚地看到存在一个使用相同
dStart
的预订。我怎样才能排除这个

使用代码过滤和打印后:

print("meetings:")
        for meeting in self.meetingRoomSuggestions {
            print(meeting.roomEmail)
            print(meeting.dStart)
            print(meeting.startTime)
        }
        print()
        print("bookings:")
        for booking in self.bookingArray! {
            print(booking.location)
            print(booking.dStart!)
            print(booking.start)
        }            

        print("filtered array: ", filteredArr)

        for items in filteredArr {
            print("email: ", items.roomEmail)
            print("dstart: ", items.dStart)
        }
返回:

    meetings:
FirstFloorTestMeetingRoom1@qubbook.onmicrosoft.com
2019-02-20 15:00:00 +0000
2019-02-20T15:00:00.0000000
GroundFloorTestMeetingRoom1@qubbook.onmicrosoft.com
2019-02-20 15:00:00 +0000
2019-02-20T15:00:00.0000000

bookings:
FirstFloorTestMeetingRoom1@qubbook.onmicrosoft.com
2019-02-20 15:00:00 +0000
2019-02-20T15:00:00.0000000
gfprojectroom1@qubbook.onmicrosoft.com
2019-02-21 10:00:00 +0000
2019-02-21T10:00:00.0000000
gfprojectroom1@qubbook.onmicrosoft.com
2019-02-21 16:00:00 +0000
2019-02-21T16:00:00.0000000

filtered array:  [QUBook.MeetingSuggestion, QUBook.MeetingSuggestion]
email:  FirstFloorTestMeetingRoom1@qubbook.onmicrosoft.com
dstart:  2019-02-20 15:00:00 +0000
email:  GroundFloorTestMeetingRoom1@qubbook.onmicrosoft.com
dstart:  2019-02-20 15:00:00 +0000

出于某种原因,过滤后的数组与原始的
meetingRoomSuggestions
数组相同-它不会过滤掉具有相同
dStart
的对象的出现。我怀疑过滤器有问题?我以前能够通过将对象数组与字符串数组等进行比较来过滤对象数组,但不是这样。

这里使用的是某种反向逻辑。你应该做的是:

let filteredArr = meetingRoomSuggestions.filter { meeting in
    return !bookingArray.contains(where: { booking in
        return booking.dStart == meeting.dStart
    })
}

用简单的英语:
filter
会议,让那些
的会议的
dStart
值等于
bookingArray
中任何对象的
dStart

值。建议初始化dStart的初始位置??编辑了我的答案。我首先尝试了这种过滤方式,但它无法过滤掉我想要的会议。。即使存在具有相同dStart的预订,也不会拾取/筛选?^看到指纹了吗above@Liam,我想你忘了
,如
中所示!bookingArray.contains
@LeoDabus,我不这么认为。至少在向某人解释某事时不会。@LeoDabus,不,我不会。这不是一个优雅的地方,这有点违背了隐式返回的唯一目的。@Liam,当然,可以根据您的要求随意调整过滤器逻辑