我有两个阵列:
var filteredTitles = [String]()
var filteredTypes = [String]()
我将第一个数组过滤为使用搜索栏的一部分。元素的顺序可能会完全改变。但是,我无法像第一个数组那样过滤第二个数组,因为我不想在搜索时将其用于计数。但我希望第二个数组与第一个数组的顺序相同。所以,回顾一下。如何通过索引过滤数组以匹配另一个数组?
一个例子:
var filteredArray = ["One", "Two", "Three"]
//Sort the below array to ["1", "2", "3"], the order of the upper array
var toBeFilteredArray = ["2", "1", "3"]
不使用字母或数字顺序,因为在这种情况下不会这样做。
编辑: 拉塞尔: 如何对这样的标题进行排序:
// When there is no text, filteredData is the same as the original data
// When user has entered text into the search box
// Use the filter method to iterate over all items in the data array
// For each item, return true if the item should be included and false if the
// item should NOT be included
searchActive = true
filteredData = searchText.isEmpty ? original : original.filter({(dataString: String) -> Bool in
// If dataItem matches the searchText, return true to include it
return dataString.range(of: searchText, options: .caseInsensitive) != nil
})
答案 0 :(得分:4)
没有两个数组 - 拥有一个自定义类型的数组,包含您需要的两个变量
定义你的结构
struct MyCustomData
{
var dataTitle : String = ""
var dataType : String = ""
}
然后宣布
var dataArray : [MyCustomData] = []
填充它并在需要的地方对其进行排序 - 我以相反的顺序填充,以便我们可以看到它被排序
dataArray.append(MyCustomData(dataTitle: "Third", dataType: "3"))
dataArray.append(MyCustomData(dataTitle: "Second", dataType: "2"))
dataArray.append(MyCustomData(dataTitle: "First", dataType: "1"))
let filteredArray = dataArray.sorted {$0.dataTitle < $1.dataTitle}
for filteredElement in filteredArray
{
print("\(filteredElement.dataTitle), \(filteredElement.dataType)")
}
// or, to print a specific entry
print("\(filteredArray[0].dataTitle), \(filteredArray[0].dataType)")
答案 1 :(得分:0)
使用zip
保持两个独立数组同步的示例:
let titles = ["title1", "title3", "title4", "title2"]
let types = ["typeA", "typeB", "typeC", "typeD"]
let zipped = zip(titles, types)
// prints [("title4", "typeC"), ("title2", "typeD")]
print(zipped.filter { Int(String($0.0.characters.last!))! % 2 == 0 })
您可以对过滤后的结果使用map
,以获取标题和类型的两个单独的过滤数组。