Arrays 如何过滤出数组';s

Arrays 如何过滤出数组';s,arrays,swift,Arrays,Swift,你好,我有一个数组,它有多个值,我想尝试过滤掉搜索栏的索引。英语术语中的示例如下。给我名称“Name2”的索引,并通过检查每个索引的第一个值中的所有字符串来执行此操作 代码: 我在这里检查了这些页面 还有一些人,运气不好如果我读对了问题,你会想找到数组的索引,谁的第一个元素与搜索模式匹配。下面演示了如何执行此操作: var receivedList = [["Name1","Apple","Fresh"],["Name2","Orange","Rotten"],["Name3","Pear

你好,我有一个数组,它有多个值,我想尝试过滤掉搜索栏的索引。英语术语中的示例如下。给我名称“Name2”的索引,并通过检查每个索引的第一个值中的所有字符串来执行此操作

代码:

我在这里检查了这些页面


还有一些人,运气不好

如果我读对了问题,你会想找到数组的索引,谁的第一个元素与搜索模式匹配。下面演示了如何执行此操作:

var receivedList = [["Name1","Apple","Fresh"],["Name2","Orange","Rotten"],["Name3","Pear","Fresh"],["Name4","Grape","Rotten"]]


func filter(keyword: String)-> [[String]] {
    return receivedList.filter({ (stringArr) -> Bool in
        for value in stringArr {
            if value.lowercased().contains(keyword.lowercased()) {
                return true
            }
        }
        return false
    })
}


var filtered = filter(keyword: searchBar.text ?? "") //Here you will get filtered values
var receivedList = [["Name1","Apple","Fresh"],["Name2","Orange","Rotten"],["Name3","Pear","Fresh"],["Name4","Grape","Rotten"]]
var searchText = "Name2"

let index = receivedList.index { $0[0] == searchText }

print(index)
以下内容将仅将您的列表筛选为第一个元素包含搜索文本的列表:

let matches = receivedList.filter { $0[0].contains(searchText) }
如果希望索引匹配,则可以使用:

let matches = receivedList
    .enumerated()
    .filter { $0.1[0].contains(searchText) }
    .map { $0.0 }

您的代码中没有字典。我在Leo Dabus处修复了一个数组,其中只有一个数组,您希望代码的输出是什么?你的问题是“过滤器”,但你也说你想找到索引。它会给我索引,就像它会重新加载一个表视图,然后显示新的过滤表视图一样。我知道如何做其他事情,比如重新加载tableview等。虽然@4Castley您可以使用
flatMap
避免再次迭代数组,但我确实需要过滤方面的帮助。基本上是同时进行过滤和映射,例如
receivedList.enumerated().flatMap{$0.1[0]。contains(searchText)?$0.0:nil}
哇,完美答案@callam是的,可以添加很多错误保护,这取决于您对数据集的了解程度。
let matches = receivedList
    .enumerated()
    .filter { $0.1[0].contains(searchText) }
    .map { $0.0 }