2d阵列过滤器swift

Abd*_*ich 3 multidimensional-array ios swift

我正在尝试根据用户输入的字符串/文本从2d数组中过滤数据,就像我们写一个人的姓名或电话号码一样,搜索和显示联系人详细信息.

在2D数组中[["名称","电话号码"]].如果用户输入的数字或名称与任何值匹配,那么将存储在另一个数组中.

var data : [[String]] = [["AB","+923476760226"],["Umair","+923366111830"],.......]
Run Code Online (Sandbox Code Playgroud)

Mor*_*iya 8

过滤2D数组的方法是每层过滤两次.

var data = [["AB","+923476760226"],["Umair","+923366111830"]]
let searchString = "+9234"

var result = data.filter { (dataArray:[String]) -> Bool in
    return dataArray.filter({ (string) -> Bool in
        return string.containsString(searchString)
    }).count > 0
}
Run Code Online (Sandbox Code Playgroud)

此代码只过滤掉至少包含一个包含searchString的项目的所有项目.

但是,我想说你真的应该将名称和数字保存在一个单独的类或结构中并构建一些马赫函数,这样你就不必过滤两次

struct Contact{
    let name: String
    let number: String

    init(name: String, number:String) {
        self.name = name
        self.number = number
    }

    func match(string:String) -> Bool {
        return name.containsString(string) || number.containsString(string)
    }
}


let properData = [Contact(name: "AB", number: "+923476760226"), Contact(name: "Umair", number: "+923366111830")]

let properResult = properData.filter { (contact) -> Bool in
    return contact.match(searchString)
}
Run Code Online (Sandbox Code Playgroud)

从长远来看,这将使您的代码更加清晰,并且通常使用这样的类和结构是一个好主意