如何在不同的数组中查找相同的元素Swift

问题描述

假设我有一个对象模型。我将这些对象放入数组。我在TableView中显示这些项目。然后,我使用SearchController过滤该数组,并将过滤后的元素放入另一个数组中,并在搜索显示它,然后选择一些行。然后,我取消搜索,并显示一个数组,但是我希望在搜索中选中的元素所在行(第二个数组中的元素)高亮显示。据我了解,我需要比较两个数组并在其中找到相同的元素并获取该元素的索引,然后将该元素的索引传递给didSelectRow。我该怎么办?

struct Model {
   var fileName: String
   var url: String
   init(fileName: String,url: String){
     self.fileName = fileName
     self.url = url
   }
}
let model1 = Model(fileName: "fileOne",url: "/path/fileOne")
let model2 = Model(fileName: "fileTwo",url: "/path/fileTwo")
let model3 = Model(fileName: "fileThree",url: "/path/fileThree")
let model4 = Model(fileName: "fileFour",url: "/path/fileFour")
...
let array: [Model] = [model1,model2,model3,model4]
var sortedArray: [Model] = []
...
//After search 
sortedArray = [model3,model4]
...
//I select element model3,in the sortedArray it has index 0,//but,let's say,I don't kNow what index doest it have in "array",how can I get it?
//I'd like to compare items by URL

解决方法

使用Array.firstIndex(where:)返回与布尔返回闭包中的条件匹配的元素的第一个索引;如果没有,则返回nil

guard let interestingIndex = array.firstIndex(where: { $0.url == model3.url })
    else { /* something's gone wrong */ }

当然,最好将url声明为实际的URL