Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/21.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_Filtering - Fatal编程技术网

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。我将在下面使用它吗