Arrays 如何筛选一个数组以对应其他数组
我有两个阵列:Arrays 如何筛选一个数组以对应其他数组,arrays,swift,filtering,Arrays,Swift,Filtering,我有两个阵列: var filteredTitles = [String]() var filteredTypes = [String]() 我使用搜索栏过滤第一个数组。元素的顺序可能会完全改变。但是,我不能像过滤第一个数组那样过滤第二个数组,因为我不想在搜索时使用它进行计数。但我希望第二个数组与第一个数组的顺序相同。所以,概括一下。如何通过索引过滤一个数组以完全匹配另一个数组 例如: var filteredArray = ["One", "Two", "Three"] //Sort the
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
})
不要有两个数组-使用一个自定义类型的数组,包含您需要的两个变量 定义你的结构
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)")
dataArray.append(MyCustomData(dataTitle:“Third”,dataType:“3”))
追加(MyCustomData(数据标题:“第二”,数据类型:“2”))
追加(MyCustomData(数据标题:“第一”,数据类型:“1”))
让filteredArray=dataArray.sorted{$0.dataTitle<$1.dataTitle}
用于在filteredArray中删除filteredElement
{
打印(“\(filteredElement.dataTitle),\(filteredElement.dataType)”)
}
//或者,打印特定条目
打印(\(filteredArray[0].dataTitle),\(filteredArray[0].dataType))
没有两个数组-使用一个自定义类型的数组,包含您需要的两个变量
定义你的结构
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)")
dataArray.append(MyCustomData(dataTitle:“Third”,dataType:“3”))
追加(MyCustomData(数据标题:“第二”,数据类型:“2”))
追加(MyCustomData(数据标题:“第一”,数据类型:“1”))
让filteredArray=dataArray.sorted{$0.dataTitle<$1.dataTitle}
用于在filteredArray中删除filteredElement
{
打印(“\(filteredElement.dataTitle),\(filteredElement.dataType)”)
}
//或者,打印特定条目
打印(\(filteredArray[0].dataTitle),\(filteredArray[0].dataType))
使用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
,为标题和类型返回两个单独的筛选数组。使用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
,为标题和类型返回两个单独的过滤数组。Russell所说的。(投票)试图保持两个阵列同步是不必要的复杂。只需使用一个包含所有所需字段的数组,并对该数组进行筛选/排序。我如何访问单个字符串,例如“1”?我已更新了答案,以显示您如何访问单个fieldsHow,我将在以下内容中使用它?:Russell说的。(投票)试图保持两个阵列同步是不必要的复杂。只需使用一个包含所有所需字段的数组,并对该数组进行筛选/排序。我如何访问单个字符串,例如“1”?我已更新了答案,以显示您如何访问单个fieldsHow。我将在下面使用它吗