Swift过滤多个字典键 [英] Swift filter for multiple dictionary keys

查看:164
本文介绍了Swift过滤多个字典键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为我的应用制作搜索栏。我正在使用过滤器方法来获取结果。



字典数组:

  var people = [
[First:John,Last:Doe],
[First:Steve,Last:Jobs],
[First:Elon,Last:Musk]
]

我只能搜索First或Last,但不能同时搜索:

  searchResults = people.filter {
var string = $ 0 [Last]
//或First

string = string?.lowercaseString

return string!.rangeOfString(searchText.lowercaseString)!= nil
}


解决方案

一种方法是简单地将两个字段与搜索字符串进行比较:

  var people = [
[First:JohnMusk,Last:Doe],
[First:Steve,Last:Jobs],
[First:Elon,Last:Musk]
]

var searchText =Musk

var searchResults = people.filter {
var firstName = $ 0 [First] !. lowercaseString
var lastName = $ 0 [Last] !. lowercaseString

返回firstName.rangeOfString(searchText.lowercaseString) !=无
|| lastName.rangeOfString(searchText.lowercaseString)!= nil

}

给我这个结果:

  2015-11-18 18:19:47.691 MyPlayground [36558:7031733](
{
First = JohnMusk;
Last = Doe;
},
{
First = Elon;
Last = Musk;
}

我相信这就是你想要的。

I'm making a search bar for my app. I'm using the filter method to get the results. I want to search through multiple keys.

Array of dictionaries:

var people = [
               ["First": "John", "Last": "Doe"],
               ["First": "Steve", "Last": "Jobs"],
               ["First": "Elon", "Last": "Musk"]
             ]

I am only able to search for either "First" or "Last", but not both, with this code:

searchResults = people.filter{
            var string = $0["Last"] 
            // or "First"

            string = string?.lowercaseString

            return string!.rangeOfString(searchText.lowercaseString) != nil
        }

解决方案

One approach would be to simply compare both fields to the search string:

var people = [
    ["First": "JohnMusk", "Last": "Doe"],
    ["First": "Steve", "Last": "Jobs"],
    ["First": "Elon", "Last": "Musk"]
]

var searchText = "Musk"

var searchResults = people.filter{
        var firstName = $0["First"]!.lowercaseString
        var lastName = $0["Last"]!.lowercaseString

       return firstName.rangeOfString(searchText.lowercaseString) != nil
              || lastName.rangeOfString(searchText.lowercaseString) != nil

}

This gives me this result:

2015-11-18 18:19:47.691 MyPlayground[36558:7031733] (
        {
        First = JohnMusk;
        Last = Doe;
    },
        {
        First = Elon;
        Last = Musk;
    }
)

Which I believe is what you want.

这篇关于Swift过滤多个字典键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆