过滤字典内的数组 - Swift

2024-01-01

我正在尝试搜索索引字典以根据客户的姓氏返回特定客户。以下是我正在使用的数据结构。每个客户端对象都有一个名称属性,它是一个字符串。

var clients = Client.loadAllClients()     //Returns client array
var contacts = [String: [Client]]()      //Indexed clients in a dictionary 
var letters: [String] = [] 

var filteredClient = [Client]()
var shouldShowSearchResults = false
var searchController : UISearchController!   

当我进行索引时,联系人字典返回:

{A: [Client("Andrew")]}

字母数组返回:

[A]

我正在使用 UISearchController 来显示过滤后的客户端数组。

func updateSearchResults(for searchController: UISearchController) {
    // how to filter the dictionary 
    self.tableView.reloadData()
}

但是,我不知道如何过滤字典以返回正确的客户列表。我尝试过使用

contacts.filter(isIncluded: ((key: String, value: [Client])) throws -> Bool((key: String, value: [Client])) throws -> Bool)

但我对实施感到非常困惑。我正在使用 Xcode 8.0 和 Swift 3.0。

如果有人能指出我正确的方向,我将不胜感激。如果我需要澄清任何事情,请告诉我。先感谢您。完整的代码可以在我的Github https://github.com/brandenk514/iKennel/blob/master/iKennel/ClientTableViewController.swift


主要问题是你正在使用字典作为数据源array.

我的建议是使用自定义结构作为模型

struct Contact {
   let letter : String
   var clients : [Client]

   init(letter: String, clients : [Client] = [Client]()) {
      self.letter = letter
      self.clients = clients
   } 

   mutating func add(client : Client) {
        clients.append(client)
   }
}

然后创建您的数据源数组

var contacts = [Contact]()  

和字母数组作为计算属性

var letters : [String] = {
   return contacts.map{ $0.letter }
}

按字母对数组进行排序很容易

contacts.sort{ $0.letter < $1.letter }

现在您可以通过这种方式搜索/过滤(text是要搜索的文本)

 filteredClient.removeAll()
 for contact in contacts {
     let filteredContent = contact.clients.filter {$0.name.range(of: text, options: [.anchored, .caseInsensitive, .diacriticInsensitive]) != nil }
     if !filteredContent.isEmpty {
         filteredClient.append(filteredContent)
     }
 }

如果您声明,您甚至可以保留这些部分(字母)filteredClient也作为[Contact]并创建临时的Contact包含已过滤项目的实例。

当然,您需要更改所有表视图数据源/委托方法以符合Contact数组,但这是值得的。数组作为数据源比字典更有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

过滤字典内的数组 - Swift 的相关文章

  • SwiftUI 图像 ClipsToBounds

    尝试使用 SwiftUI Xcode 11 0 beta 2 我尝试用图像填充视图 Image large resizable aspectRatio contentMode fill frame width 80 height 80 al
  • 如何随机打乱地图中的值?

    我有一个 std map 其中键和值均为整数 现在我想随机打乱地图 因此键随机指向不同的值 我尝试了 random shuffle 但它无法编译 请注意 我并没有尝试洗牌键 这对于地图来说没有意义 我正在尝试随机化这些值 我可以将这些值推入
  • Swift 3 中的 _ArrayType 去了哪里?

    我有一些用于中继的代码 ArrayType在 Swift 3 之前 我试图了解公共协议发生了什么 ArrayType 任何想法 ArrayType被重命名 ArrayProtocol 您可以在ArrayType swift https gi
  • Swift MKAnnotationView 旋转

    我试图在坐标更改时旋转我的自定义注释 我可以成功地更改坐标 但尝试了一切方法来旋转它 但没有成功 基本思想是有一个平面并通过旋转设置其方向 这是我的代码 import UIKit import MapKit class CustomPoin
  • 修改多张照片时只有一个 iOS 权限对话框

    我的应用程序允许用户从相机胶卷中选择多个图像并对这些图像应用编辑 但是 它会提示用户获得每个图像编辑的权限 编辑用户图像时是否可以只显示一个权限对话框 如果是 我该如何将我的编辑分组为一项权限 这是我的应用程序的屏幕截图 我在应用商店中发现
  • 在 Swift 中使用显式对象类型迭代数组

    我有一个数组 let individualScores 75 43 103 87 12 我这样迭代 for score in individualScores 但是 有没有办法显式声明对象类型呢 我认为以后使用自定义对象或其他原因它会派上用
  • Clojure 的映射和减少 Monad...Juxt Monad 怎么样?

    在学习 Clojure 的过程中 我花了很长时间试图理解 monad 它们是什么以及我们如何使用它们 但没有取得太大成功 然而 我发现了一个很棒的 Monads for Dummies 视频系列 http vimeo com 2071730
  • 身份验证后如何退出 Google

    所以我的应用程序可以选择使用 Google 登录 单击 Google 提供的按钮后 将打开一个 Web 视图并让用户输入其凭据 允许应用程序访问其信息后 应用程序将用户登录并将 SignInViewController 更改为 TabBar
  • Windows 窗体和 XNA - 绘制不是实时的

    我目前正在为 XNA 开发一个关卡编辑器 它是通过结合 Windows 窗体和 XNA 构建的 我正在使用 App Hub 上示例中的内容链接文本 http create msdn com en US education catalog s
  • 缩进 UILabel 的第二行(swift)

    var testLabel UILabel frame CGRectMake 8 0 tableView frame width 8 100 let testDesc dsfdddfdsfdsfsdfdsfdsfdsfdsfdsfsdfds
  • 将 Unmanaged 与 nil 进行比较

    代码是从这篇博客文章复制的 http matthewpalmer net blog 2014 06 21 example ios keychain swift save query http matthewpalmer net blog 2
  • 在 UIScrollView Swift 中禁用垂直滚动

    不要将此问题标记为重复 我读了很多问题 但没有找到问题的答案 我的问题如下 我有一个UIScrollView它应该只水平滚动 这里它垂直滚动 20px 奇怪的事实 它似乎与状态栏的高度相同 我尝试打印内容大小 y 偏移量和高度UIScrol
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem
  • 在 SwiftUI 中,如何在 UIView 内部或作为 UIView 使用 UIHostingController?

    另一个问题标题可以是 如何将 UIHostingController 的视图添加为 UIView 的子视图 我正在创建一个新的 UI 组件 并且很乐意尝试 SwiftUI 下图是当前的视图结构 UIView 是我现在正在使用的 右上 Swi
  • ARKit – 无法在 MCSession 中解码 ARAnchor

    我正在使用 WWDC 2018 中推出的 ARKit 2 0 测试 Apple 的多用户 AR 演示应用程序 创建多用户 AR 体验 https developer apple com documentation arkit creatin
  • NSURLSessionDataDelegate方法didReceiveData等没有被调用

    我遇到的问题是 didReceiveData 和 didCompleteWithError 未被调用 这是我的代码 class LoginViewController UIViewController NSURLSessionDataDel
  • 如何在 Swift 中生成随机数?

    我意识到 Swift 书提供了随机数生成器的实现 最佳实践是复制并粘贴此实现吗 或者有一个库可以做到这一点 我们现在可以使用吗 斯威夫特 4 2 Xcode 10 附带的 Swift 4 2 为许多数据类型引入了新的易于使用的随机函数 您只
  • GCDAsyncSocket 多个连接不会接受来自多个套接字的数据

    我正在尝试编写一个同时连接到多个套接字的应用程序 当连接新套接字时 我在从旧套接字接收数据时遇到问题 最主要的是委托没有被先前连接的套接字激活 这是我的总体计划 var struct serverlist Create array for
  • 关闭模态视图控制器时如何保持呈现视图控制器的方向?

    我正在开发这个应用程序 我需要所有视图控制器 但只有一个是纵向的 单一视图控制器很特别 我需要它能够旋转到手机所在的任何方向 为此 我以模态方式呈现它 未嵌入导航控制器中 所以 例如 我的结构是这样的 window Portrait roo
  • SwiftUI - NavigationSplitView 内的 NavigationStack 内的嵌套链接不起作用

    我正在尝试 ipadOS16 macOS13 中提供的新导航 API 但在弄清楚如何在 macOS 13 上将 NavigationSplitView NavigationStack 和 NavigationLink 组合在一起时遇到了一些

随机推荐

  • 是否可以在使用sql的更新语句中使用MAX?

    我正在尝试在sql语句中使用MAX函数 这就是我想做的 像这样的东西 UPDATE MainTable SET Date GETDATE where ID Max 我知道这是错误的 特别是在我放置 where 条件但无法弄清楚如何在同一语句
  • 在 Google Analytics iOS SDK v3 中设置用户性别和年龄

    使用最新的Google Analytics SDK v3 0 6 我在文档中找不到任何地方 通过头文件搜索或网络搜索如何设置当前用户的年龄和性别以进行GA跟踪 我成功地将自定义维度用于其他事情 并且可以将其中两个用于年龄和性别 但当已经有年
  • Firebase 数据库带宽计算

    两周前 我发布了一款名为 MyPetrol 的 Android 应用程序 三天之内 马来西亚就有大约 9 万用户 之后 由于 Firebase 数据库带宽消耗巨大 3 天 117GB 我关闭了该应用程序 我是一个自学成才的爱好者 没有IT相
  • android playstore支持非续订订阅吗?

    我的问题是我们可以在我们的 Android 应用程序中提供非续订订阅的功能吗 因此 用户将通过邮件收到他 她的订阅已过期的通知 因此他将像 IOS 一样手动重新订阅 是的 它确实 参见Android官方文档的描述 您可以创建关联的数字商品的
  • 当我第一次获取 nginx 时发生错误 CORS/503 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 这与我之前的问题有关从这里 https stackoverflow com questions 75287786 cor
  • 在 java 8 中迭代和映射两个列表

    我有 2 个清单 列表1 对象1 名称1 id1 列表2 对象2 名称2 id2 假设 list1 的大小与 list2 相同 我想迭代列表 2 如果列表 2 的名称不为空 则更新列表 1 的名称 1 这是使用旧java的代码 for Ob
  • 在 React Native 的 onPress 事件期间 this.state 未定义

    你好 我是 React Native 的新手 我的代码是 import React View Text TextInput Component from react native import Style from styles signi
  • 使用 iTextSharp 编辑现有 PDF 文件

    我有一个 pdf 文件 我正在通过使用以下编码将其转换为文本来处理它 ITextExtractionStrategy strategy new SimpleTextExtractionStrategy string currentText
  • MySQL 从流读取失败

    我间歇性地面临以下错误 通过在 mysql 服务器设置中使用 跳过名称解析 选项可以解决此问题 但是 根据网上发现的许多建议 使用 127 0 0 1 应该可以解决该问题 但这也没有帮助 您能否建议我一个解决方法或一个 SQL 命令 通过它
  • 文件描述符规范

    我试图理解文件描述符的标志和模式 手册页 http man7 org linux man pages man2 fcntl 2 html for fcntl manipulate file descriptor int fcntl int
  • Neo4j 关系索引 - 搜索关系属性

    我有一个具有以下结构的 neo4j 图 账户 交易 账户 Transaction是neo4j关系 Account是节点 每笔交易都设置了各种属性 例如交易 ID 金额 日期和各种其他银行信息 我可以按帐户 ID 运行搜索 结果返回正常 但是
  • 如何防止 iPhone 屏幕在应用程序运行时变暗或关闭?

    我正在开发一个不需要用户输入的应用程序 但我不希望 iPhone 进入省电模式 是否可以通过应用程序禁用省电功能 Objective C UIApplication sharedApplication setIdleTimerDisable
  • Kendo Ui 下拉列表集通过 Javascript 可见

    我需要在 javaScript 中以编程方式设置可见的kendo dropdownlist 我曾尝试过 dropdownlist ddl data kendoDropDownList dropdownlist visible false d
  • 按因子级别拆分数据帧并按这些级别命名数据帧

    我想按因子变量之一的级别拆分现有数据帧 以便拆分数据帧的名称与因子的级别相对应 df lt data frame cbind X 1 10 Y rnorm 10 Z sample LETTERS 1 3 10 replace TRUE If
  • 使 div 自动向左而不是向右扩展宽度

    我的网站上有一个 div 其中包含充当菜单的项目列表 我已经设置了CSSwidth auto这样 如果菜单项太长 它会重新调整大小 但目前 这将扩展到右侧 并将我的其余内容 推 到右侧 这很难解释 所以举个例子 如果你去http redsq
  • C 中 _Bool 和 bool 类型之间的区别?

    谁能解释一下两者之间有什么区别 Bool and boolC 中的数据类型 例如 Bool x 1 bool y true printf d x printf d y 这些数据类型是在 C99 中添加的 自从bool在 C99 之前没有保留
  • 如何在 Sails js (nodejs MVC) 中使用外部 REST API

    我正在使用 sails js 作为 Node js 的 MVC 我仍在学习它 我设法从自己的数据库中获取数据并使用它 但现在我需要 想要从外部 REST API 获取数据 我在我的控制器中使用了这个 api controllers Some
  • C++ 的首选命名约定是什么?

    通过查看 boost 库和 stl 然后查看人们的示例 我感到非常困惑 看起来大写的类型名称都散布在所有小写字母中 并用下划线分隔 如今 事情到底应该怎样做呢 我知道 NET 世界有自己的一套约定 但它似乎与 C 领域完全不同 你打开了一个
  • 监听来自 Dart 的 javascript 事件

    Dart 有没有办法监听 javascript 库中的事件 例如 jqrangesliderhttp ghusse github io jQRangeSlider http ghusse github io jQRangeSlider 当有
  • 过滤字典内的数组 - Swift

    我正在尝试搜索索引字典以根据客户的姓氏返回特定客户 以下是我正在使用的数据结构 每个客户端对象都有一个名称属性 它是一个字符串 var clients Client loadAllClients Returns client array v