根据另一个数组的顺序对数组进行有效排序

2024-01-09

假设我有这个:

struct Pet {
    let name: String
}

let pets = [Pet(name: "Z"), Pet(name: "F"), Pet(name: "A"), Pet(name: "E")]
let petNames = ["E", "F", "Z", "A"]

我的预期输出是:

[Pet(name: "E"), Pet(name: "F"), Pet(name: "Z"), Pet(name: "A")]

我该如何排序pets通过以下方式有效地petNames' order?

我当前的方法似乎效率极低:

var sortedPets = [Pet]()
for n in petNames {
    sortedPets.append(pets.first(where: { return $0.name == n })!)
}

我可以使用任何功能性方法吗?


效率不高,但它从功能上解决了问题:

let pets2 = pets.sorted{petNames.index(of:$0.name)! < petNames.index(of:$1.name)!}

现在我们知道我们在追求什么,这更复杂,但效率更高,因为字典查找速度很快:

var d = [String:Int]()
zip(petNames, 0..<petNames.count).forEach { d[$0.0] = $0.1 }
let pets2 = pets.sorted{d[$0.name]! < d[$1.name]!}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据另一个数组的顺序对数组进行有效排序 的相关文章

  • 更新 iOS 应用程序的应用内购买内容?

    我似乎无法在任何地方找到这个问题的答案 所以这里 我正在开发一个 iOS 应用程序 该应用程序将具有非消耗性应用内购买 扩展包 例如 假设我出售一个包含 10 个级别的包 并且在一个月内我想将应用内购买更新为包含 15 个级别 用户无需重新
  • 将 swift 结构体转换为 json 字符串

    我正在尝试将我的 swift 结构转换为 json 格式 类似这样的问题似乎有不少 但到目前为止 没有一个解决方案对我有用 这是我的结构 struct Rec Codable var name String var time Int var
  • 是否有可能在 Swift 中捕获 NSInternalInconsistencyException ?

    是否有可能在 Swift 中捕获 NSInternalInconsistencyException 如果是的话 那怎么办呢 例如可以通过以下方式完成https github com williamFalcon SwiftTryCatch h
  • 在启用 Bitcode 的情况下导出时出错(未找到架构 armv7 的符号)

    我有一个相当老的项目 其最低部署目标设置为 iOS 8 4 由于技术原因位码must被启用 该项目构建并运行良好 然而 当尝试导出存档的版本时 就会出现问题 我使用的是 Xcode 8 2 1 当我使用以下选项创建测试版本 使用企业证书签名
  • 终止应用程序后发送本地通知 swift 2

    当应用程序状态进入终止 不运行状态时 可以在特定时间后执行某些特定任务 func applicationDidEnterBackground application UIApplication print APP in background
  • iPhone 应用程序中的 iOS 7 状态栏恢复为 iOS 6 默认样式?

    在 iOS 7 中UIStatusBar它的设计方式是与视图合并 如下所示 GUI designed by Tina Tav ar http dribbble com shots 1183911 Side menu and status b
  • 何时以及为何使用多个 NSManagedObjectContext?

    基本上 我在我的应用程序中只使用了一个 moc 但我认为在某些情况下我应该使用多个 NSManagedObjectContext 什么时候应该使用多个 NSManagedObjectContext 我听说在某些情况下我应该使用 3 moc
  • 如何在 UIView 中获取父导航控制器

    我创建了一个UITabBarController在我的应用程序委托中 其中每个选项卡栏项目都有不同的UINavigationController加载自定义的UIViewController带NIB 使用 pushViewController
  • Swift 中的条件导入

    我有一个在各种应用程序中使用的日志功能 由于我在整个应用程序中使用它 因此也可以方便地进行 Crashlytics 日志记录调用 然而 并非每个应用程序都使用 Crashlytics 在 Objective C 中 您可以使用预处理器条件来
  • 错误只有 size-1 数组可以转换为 Python 标量

    我有这个代码 for a in data X for i in a if not i isdigit x hash i data X column row x row row 1 row 0 column column 1 desired
  • 如何使用Gson将JSONArray转换为List?

    在我的 Android 项目中 我试图将收到的 JSONArray 转换为列表 在 的帮助下这个答案 https stackoverflow com questions 8371274 how to parse json array in
  • iOS 版 Google 地图 SDK 中的热图

    有没有办法添加热图图层适用于 iOS 的 Google 地图 SDK https developers google com maps documentation ios 注意 我指的是存在于Javascript 版本的 Google 地图
  • iOS 上的内存交换和虚拟内存 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Does iOS支持像Linux一样自动运行的内存交换和虚拟内存吗 iOS有虚拟内存 但没有后备存储 因此没有交换内存的调入 调出 A
  • 处理具有不同缩放/分辨率的所有 iPhone 中的 UI [重复]

    这个问题在这里已经有答案了 在 iOS 中处理 iPhone 4 iPhone 5 iPhone 6 iPhone 6 UI 屏幕的最佳方法是什么 iPhone 6 的尺寸 3 倍缩放 坐标空间 414 x 736 像素 iPhone 6
  • 在 Swift 中使用显式对象类型迭代数组

    我有一个数组 let individualScores 75 43 103 87 12 我这样迭代 for score in individualScores 但是 有没有办法显式声明对象类型呢 我认为以后使用自定义对象或其他原因它会派上用
  • 创建并初始化具有连续名称的类的实例

    我有一个BankAccount班级 我试图创建这个类的多个实例并将它们放入一个数组中 例如 accounts Ba1 BankAccount new 100 Ba2 BankAccount new 100 我想初始化包含大量实例的数组 假设
  • FlurrySDK 与 cocoapods

    我正在尝试使用 Cocoapods 将 FlurrySDK 框架集成到我的应用程序中 正如我已经使用很多框架所做的那样 但由于某种原因 xcode 不断抛出此编译错误 Undefined symbols for architecture a
  • 位图太大 as3

    在AS3中 我从zip文件加载png nochump的zip库通过ByteArray到Loader png 的宽度最大可达 45k 像素 但高度仅为 120 像素 这在 Flash 中产生了一个问题 因为图像的宽度只能约为 8000 像素
  • Swift - 带循环的多个链 http 请求

    两天以来 我感觉我正在搜索整个网络来解决多个 http 请求的问题 所以我的工作流程如下所示 将图像上传到服务器 响应 XML 格式和任务 ID 使用任务 ID 向服务器发出 GET 请求 以检查该任务的状态 响应 XML 格式 其中状态可
  • 如何在 iOS 11 上的 Swift 中获取 FLAC 文件元数据?

    我需要获取 FLAC 文件的元数据 我尝试了以下代码 let item AVPlayerItem url URL fileURLWithPath path let commonMetadata item asset commonMetada

随机推荐

  • GoogleMaps v3 API 单击时仅创建 1 个标记

    我成功地创建了一个点击标记 但是 使用以下代码 每次点击我都会得到一个新标记 我只希望添加一个标记 如果有人点击多次 我希望它将现有标记移动到新标记任何人都可以帮忙这是代码 function placeMarker location var
  • 解压缩 zip 文件会出现“java.util.zip.ZipException:无法读取版本”或“java.util.ZipException 无法读取本地标头版本 45”

    我只想提取一个普通的 zip 文件 但它总是失败 这是我现在使用的代码 private File downloadPath new File Environment getExternalStorageDirectory Test file
  • Facebook 提示用户登录两次

    我有一个 Android 应用程序 可通过 Facebook 登录并与 parse com 集成 不幸的是 当用户使用 Facebook 登录时 授权 Web 视图会启动两次 我已经广泛搜索了合适的解决方案 但还没有找到 我也玩过 Face
  • 使用 JavaScript 发送邮件

    我想在用户单击图像时打开一个带有 收件人地址 的新 Outlook 邮件模板 我已经在 html 页面中返回了我的代码 与图像链接 每当它加载时 javascript 都应该打开一个新的邮件模板 但该功能不起作用 请让我知道我的代码有什么问
  • 如何让 SignalR 在断开连接时表现得优雅

    我的应用程序经常会在糟糕的公司网络 代理 防火墙等 下使用 所以我不能依赖套接字 长轮询实际上是我唯一的选择 这是长轮询的最大问题 长轮询在某个时间点断开连接 我自动重新连接 根据文档 用户单击导致集线器方法调用的内容 但尚未建立连接 发生
  • 使用 MediaRecorder 录制音频 webm 时没有元数据

    对于我的项目 我使用 MediaRecorder 录制用户音频 它几乎工作正常 当我希望使用 Wavesurfer js 显示用户录音的波形时 我的问题就出现了 但它不会加载我的录音 不过 使用音频元素播放录音效果很好 在尝试不同的源之后
  • Docker-Compose 持久数据问题

    我在配置持久数据时遇到问题Mariadb 我在用着docker compose 每个服务都在一个容器中 Nginx PHP FPM and Mariadb 一切正常 除了Mariadb不存储数据 每次重新启动容器时 我都会丢失所有数据 然后
  • 如果我忘记将 null 分配给文件指针,如何检查文件是否打开

    我已经打开了一个文件 FILE fp fopen file txt r fclose fp 场景是我忘记分配 null 给fp现在我想使用相同的方法检查该文件是否打开fp pointer 你不能 的价值fp关闭后它是不确定的 http ww
  • 一个功能应用程序中具有多种耐用功能

    是否可以在一个函数应用程序中托管多个持久函数 我们如何为每个持久函数指定不同的任务中心名称 添加丹尼尔 戴森的回应 如果多个功能应用程序共享一个存储帐户 则每个功能应用程序必须配置单独的任务中心名称 一个存储帐户可以包含多个任务中心 此限制
  • Android ViewPager 中不同宽度的布局

    我想使用水平视图寻呼机创建一些滚动视图 左视图必须具有全屏宽度 但右视图只有四分之一宽度 它将是像 Dolphin 浏览器一样的垂直面板 可以这样做吗 我变了android layout width布局正确 但没有用 My code pub
  • 是否永远不可能使用 Silverlight OpenFileDialog 从文件中获取 FullName?

    我想从 Silverlight OpenFileDialog 上的文件获取全名 当我尝试这样做时 Silverlight 向我抛出错误 我看到 FullName 上有一个属性说它是 SECURITY CRITICAL 但我需要显示完整路径
  • 谷歌应用程序引擎开发服务器上的自动任务执行(python)

    python 开发服务器的文档是这样描述运行任务的 当您的应用程序运行在 开发服务器 任务队列是 不自动处理 反而 任务队列会累积您可以执行的任务 由开发商检查并执行 安慰 但是 python sdk 1 3 4 版本 我正在使用 的发行说
  • 枚举 Windows 纸张尺寸

    我可以使用获取当前区域设置纸张大小 GetLocaleStr LCID LOCALE IPAPERSIZE IntToStr DMPAPER A4 where LOCALE IPAPERSIZE 100A 但有没有办法枚举所有纸张尺寸及其名
  • 连接 SQL 查询中一个字段的多个结果

    我不确定这是否可以通过 SQL 查询实现 但我会尝试一下 我正在用 C 开发一个 SharePoint Web 部件 它连接到 SQL 数据库并运行查询 然后将该结果集数据绑定到网格视图 它工作正常 但我有一个小障碍 在大多数情况下 我的查
  • http 标头中是否允许存在多个线性空白

    我试图理解http www w3 org Protocols rfc2616 rfc2616 sec2 html sec2 2 http www w3 org Protocols rfc2616 rfc2616 sec2 html sec2
  • 使用 boost:asio 和 select?阻塞 TCP 输入或文件更新

    我原本打算在程序中设置一个线程 该线程将等待两个文件描述符 一个用于套接字 第二个用于描述文件系统的 FD 特别是等待查看是否将新文件添加到目录中 由于我预计很少会看到添加的新文件或传入的新 TCP 消息 因此我希望有一个线程等待任一输入并
  • 如何使用 Gradle 构建 Google protocol buffers 和 Kotlin?

    我正在尝试使用 Gradle 构建一个同时使用 Google 协议缓冲区和 Kotlin 的项目 我希望将 proto 文件编译为 Java 源代码 然后从我的 Kotlin 代码中调用该源代码 我的源文件是这样排列的 src main p
  • 使用 SearchView 过滤 RecyclerView 的 LiveData 内容列表

    我创建了 RecyclerView 其中包含简单的单词列表 GroupVc 对象的字符串名称 由于列表可能很长 我想使用工具栏中的 SearchView 对其进行过滤 我的应用程序的架构基于 Android 架构组件 其中所有 GroupV
  • 如何将一个输入框中的值传递到另一个输入框

    我正在尝试在框之间传递值 因此 当用户在第一个文本框中键入时
  • 根据另一个数组的顺序对数组进行有效排序

    假设我有这个 struct Pet let name String let pets Pet name Z Pet name F Pet name A Pet name E let petNames E F Z A 我的预期输出是 Pet