Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
Swift 搜索3个以上的值_Swift_Search - Fatal编程技术网

Swift 搜索3个以上的值

Swift 搜索3个以上的值,swift,search,Swift,Search,我正在为我的应用程序构建一个搜索功能,让您可以通过姓名或电子邮件搜索用户。每个用户都有3个字段:姓名、电子邮件和ID。我试图找出是否有更有效的方法来完成以下任务:当您键入姓名或电子邮件时,需要获取其他2个字段,假设数据存在 现在,我正在将从数据库检索到的所有用户数据组织到3个2d数组中: var emailByName = [[String]]() // ex: ["John Doe", "email@gmail.com"] var nameByEmail = [[String]]()

我正在为我的应用程序构建一个搜索功能,让您可以通过姓名或电子邮件搜索用户。每个用户都有3个字段:姓名、电子邮件和ID。我试图找出是否有更有效的方法来完成以下任务:当您键入姓名或电子邮件时,需要获取其他2个字段,假设数据存在

现在,我正在将从数据库检索到的所有用户数据组织到3个2d数组中:

var emailByName = [[String]]()     // ex: ["John Doe", "email@gmail.com"] 
var nameByEmail = [[String]]()     // ex: ["email@gmail.com", "John Doe"]
var IdByEmail = [[String]]()       // ex: ["email@gmail.com", "123456789"]
注意,可以有相同的名称,但电子邮件和ID是不同的

当你输入email@gmail.com,应用程序首先查看nameByEmail以获取此人的姓名,然后查看IDbyMail以获取ID。另一方面,如果键入名称,则会搜索emailByName数组,并使用结果搜索IDbyMail数组


我有一种感觉,使用3个不同的数组不是很有效。有没有更好的方法来实现这种三角搜索?

您需要一个具有以下3个属性的类或结构:id、name、email。然后使用数组上的谓词执行搜索。这是去你想去的地方最容易的路线。关于NSPredicate有很好的文档,它可以在阵列上工作,这非常好

创建一个类或协议,然后创建一个具有3个属性的类或结构 把它们放在阵列中 构造NSPredicates以支持按名称或电子邮件搜索
这就是全部。

谢谢,我现在正在研究谓词。你认为我应该使用它们还是使用.filter函数?filter也很好,谓词的优点是,假设你使用CoreData,数组和数据库的方法是相同的。此外,我倾向于将过滤器主要用于非常简单的实现。这两种方法都很简单。我承认,虽然我相当多地使用了功能性方法,但在许多情况下,我发现它是一种令人讨厌的方法。