在 Swift 中,如何根据一个数组对另一个数组进行排序?

2024-04-25

在 Swift 中,假设我有两个数组:

var array1: [Double] = [1.2, 2.4, 20.0, 10.9, 1.5]
var array2: [Int] = [1, 0, 2, 0, 3]

现在,我想按升序对 array1 进行排序并相应地重新索引 array2 以便我得到

array1 = [1.2, 1.5, 2.4, 10.9, 20.4]
array2 = [1, 3, 0, 0, 2]

有没有一种简单的方法可以使用 Swift 函数或语法来做到这一点?

我知道我可以构建一个函数来执行此操作并可以跟踪索引,但我很好奇是否有更优雅的解决方案。


let array1: [Double] = [1.2, 2.4, 20.0, 10.9, 1.5]
let array2: [Int] = [1, 0, 2, 0, 3]

// use zip to combine the two arrays and sort that based on the first    
let combined = zip(array1, array2).sorted {$0.0 < $1.0}
print(combined) // "[(1.2, 1), (1.5, 3), (2.4, 0), (10.9, 0), (20.0, 2)]"

// use map to extract the individual arrays    
let sorted1 = combined.map {$0.0}
let sorted2 = combined.map {$0.1}

print(sorted1)  // "[1.2, 1.5, 2.4, 10.9, 20.0]"
print(sorted2)  // "[1, 3, 0, 0, 2]"

将 2 个以上的数组一起排序

如果您有 3 个或更多数组要一起排序,您可以sort其中一个数组及其offsets, use map来提取offsets,然后使用map对其他数组进行排序:

let english = ["three", "five", "four", "one", "two"]
let ints = [3, 5, 4, 1, 2]
let doubles = [3.0, 5.0, 4.0, 1.0, 2.0]
let roman = ["III", "V", "IV", "I", "II"]

// Sort english array in alphabetical order along with its offsets
// and then extract the offsets using map
let offsets = english.enumerated().sorted { $0.element < $1.element }.map { $0.offset }

// Use map on the array of ordered offsets to order the other arrays
let sorted_english = offsets.map { english[$0] }
let sorted_ints = offsets.map { ints[$0] }
let sorted_doubles = offsets.map { doubles[$0] }
let sorted_roman = offsets.map { roman[$0] }

print(sorted_english)
print(sorted_ints)
print(sorted_doubles)
print(sorted_roman)

Output:

["five", "four", "one", "three", "two"]
[5, 4, 1, 3, 2]
[5.0, 4.0, 1.0, 3.0, 2.0]
["V", "IV", "I", "III", "II"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Swift 中,如何根据一个数组对另一个数组进行排序? 的相关文章

  • 3D 数组如何在 C 中存储?

    据我所知 C 中的数组是按行优先顺序分配的 因此 对于 2 x 3 数组 0 1 2 3 4 5 存储在内存中为 0 1 2 3 4 5 但是 如果我有一个 2 x 3 x 2 数组怎么办 0 1 2 3 4 5 and 6 7 8 9 1
  • 如何获取由 1D NumPy 数组中的值表示的索引处值为 1 的 2D NumPy 数组 (Python)

    如何在 Python 中获取由 1D np array 中的值表示的索引处值为 1 的 2D np array Example 1 2 5 1 2 应转换为 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0
  • 如何在SAS中删除重复的记录\观察而不进行排序?

    我想知道是否有办法取消重复记录WITHOUT排序 有时候 我想保留原来的顺序 只想删除重复的记录 是否可以 顺便说一句 以下是我对不重复记录的了解 它最终会进行排序 1 proc sql create table yourdata nodu
  • 在两个应用程序之间通过 url 方案快速传递数据?

    有两个测试应用程序称为发送者和接收者 他们通过 UrlScheme 相互通信 我想从发送者发送一个字符串到接收者 这可能吗 关于字符串的详细信息 我都在发送者和接收者中创建文本字段 我会在发送者文本字段上发送一些字符串 当我单击按钮时 字符
  • 如何按高度对 DIV 进行排序?

    我有三个divs 我想按高度从最大到最小对它们进行排序 div smallest div div largest div div middle div 任何想法 这很简单 使用 sort http www wrichards com blo
  • 在 JavaScript 中,将 NodeList 转换为数组的最佳方法是什么?

    DOM 方法document querySelectorAll 和其他一些 返回一个NodeList 对列表进行操作 例如使用forEach the NodeList必须首先转换为Array 转换的最佳方式是什么NodeList to an
  • JS中如何使用数组过滤对象数组? [复制]

    这个问题在这里已经有答案了 我希望你今天过得愉快 这非常简单 我有一个对象数组 我想在另一个数组的帮助下过滤掉它 场景如下图所示 var ob array a 1 col 2 abc a 2 col 2 xyz a 3 col 2 jkl
  • 1 MB 或更多的 Java 字节数组占用 RAM 的两倍

    在 Windows 10 OpenJDK 11 0 4 x64 上运行以下代码会生成输出used 197 and expected usage 200 这意味着包含 100 万个元素的 200 个字节数组大约占用 200 个字节 200MB
  • Wordpress 数组显示特定类别的帖子并显示帖子摘录和功能

    大家好 正在寻找 WordPress 帮助 我需要放置一个简单的查询 数组来显示来自某只猫的帖子 例如 新闻 其中将包含帖子特色图像 有人可以帮忙吗 Gary Try this a href title a
  • 下标的使用不明确

    该代码块以前可以工作 但现在不行了 我在纬度和经度变量上收到错误 下标 的使用不明确 这是怎么回事 这是因为 Swift 更新吗 func showPrecincts var urlBoundaries http www oklahomad
  • 使用 Swift p2/OAuth2 并行刷新 OAuth2 访问令牌请求

    我在用https github com p2 OAuth2 https github com p2 OAuth2用于通过 OAuth2 连接到我的应用程序的后端 效果非常好 我遇到的问题是 当访问令牌过期并且同时发生多个请求时 其中一些请求
  • 应用程序崩溃 - dyld: 未找到符号: _OBJC_CLASS_$_UITraitCollection

    dyld Symbol not found OBJC CLASS UITraitCollection 代码中我引用 UITraitCollection 的唯一地方是 func loadImages imageName NSString va
  • 列表项未正确删除(React)

    如果我的笔记应用程序能提供一些帮助 我将不胜感激 假设我的笔记列表中有 3 个笔记 我想删除列表顶部的注释 无论我尝试删除哪一个 总是首先删除列表最底部的注释 我检查了 React 控制台 应用程序组件状态中的注释数组表明它已正确删除 但从
  • 从 CMSampleBuffer 播放音频

    我在 iOS 中为群组创建了一个视频聊天应用程序 我一直在寻找一些方法来分别控制不同参与者的音频音量 我找到了使用静音和取消静音的方法isPlaybackEnabled in RemoteAudioTrack 但不控制音量 我还想我们是否可
  • 如何将数据从 SQLITE 数据库获取到 Android 中的数组?

    很确定这是一个简单的问题 但我对所有将从游标返回的数据适应不同视图的示例感到困惑 我只想运行原始查询并将返回的每一项数据放入浮点数组中 以便我稍后可以将它们添加起来 我需要为此使用什么 Thanks 当您查询数据库时 您仍然会有一个游标 但
  • UIImagePickerController 和 iCloud 照片

    切换到 iCloud Photo 后 似乎 UIImagePickerController 返回的一些图像非常模糊 看起来该图像是从 iCloud 照片中获取的 我是否能够检索原始图像 或过滤掉 iCloud 照片图像 或者我是否必须切换到
  • 如何为长时间运行的函数设置超时?

    我有一个带有一些代码的函数 可能需要很长时间才能完成 如果该功能花费的时间超过特定时间 我希望该功能停止继续 我怎样才能实现这个 我尝试了下面的解决方案 但它不会停止执行 override func viewDidLoad super vi
  • UIDocumentBrowser 无法在 iPad 上运行,但在模拟器上运行良好 [iOS、Swift]

    我正在学习如何构建一个document basediOS 中的应用程序 我按照苹果官方的例子 https developer apple com documentation uikit view controllers building a
  • 在 JavaScript 中将整数数组转换为字符串数组

    我有一个如下所示的数组 var sphValues 1 2 3 4 5 然后我需要转换上面的数组 如下所示 var sphValues 1 2 3 4 5 我怎样才能转换 我用它来自动完成 您可以使用map https developer
  • 快速比较两个自定义对象

    我在 Swift 中定义了以下协议 protocol RecordingObserver func aFunc 我必须在某个地方比较实现此协议的两个对象 以检查它们是否相同 我面临的问题是显然 Swift 不允许我们这样做 func are

随机推荐

  • ASP.Net Identity 2.0:用户是System.Web.Security.RolePrincipal,为什么?

    我正在尝试在现有应用程序中实现 Asp Net Identity 2 0 OWIN 但在角色方面我遇到了各种麻烦 我从项目模板创建了一个示例项目 并且 据我所知 我已将其中的所有内容复制到我的应用程序中 我修改了连接信息 以便身份验证表来自
  • .Net 与 Java 垃圾收集器

    有谁知道 Java 和 Net 垃圾收集器之间的主要区别 网上搜索并没有透露太多信息 这是一个测试中出现的问题 区别在于 CLR Net GC 和 JVM GC 之间 而不是语言本身 两者都可能发生变化 并且其行为规范宽松 允许在不影响程序
  • ASP.NET MVC 路由中的通配符

    我正在使用 asp net mvc 与 vs2008 和 IIS7 我想要完成的是所有以 summer 开头的请求都路由到同一个控制器 到目前为止 我已经构建了大量的路线 但它们都是针对一条路径的 带有偏离参数的路径 但这条路线必须路由 w
  • 将输入类型数限制为角度 2 中的小数点后 2 位

    我在一个html页面上有很多输入框 我想限制用户输入小数点后两位后的任何数字 目前尝试应用 html 5 input Step 0 00 但不起作用 任何打字稿解决方案也可以 请参阅以下指令的演示Plnkr https plnkr co e
  • JPQL 和联接表

    我对 SQL 和 JPQL 的理解不是很好 我一直在尝试创建以下 sql 语句的 JPQL 查询 select group from user user group group where user group user id user i
  • Elixir 中的递归和匿名函数

    我正在尝试定义一个匿名函数来执行点积 我可以将其编码为私有函数 没有任何问题 但我正在努力解决匿名函数语法 我知道我可以以不同的方式实现这一点 但我试图了解如何使用模式匹配和递归来定义匿名函数 这是我当前的实现 dot fn i input
  • 最大覆盖不相交间隔

    假设您有 k 无法尝试所有可能的子集 2 k 不可行 贪婪方法按 a i 区间覆盖算法 排序 按 b i 最大不相交区间数算法 排序不起作用 不知道是否有动态程序解决方案 考虑到输入的大小 我认为解决方案应该是 O k log k 或 O
  • JavaScript 中的奇怪字符导致其无法加载

    我的网站在本地主机上运行良好 我的 JavaScript 正在加载并运行良好 但是当我部署站点时 脚本不起作用 当我右键单击页面并说查看源代码 然后查看链接的脚本文件时 文件开头有一些奇怪的字符 函数 在本地主机上 我的脚本文件像这样开始
  • 如何在powerpoint vba中制作进度条?

    如何使用 PowerPoint VBA 制作进度条 它应该作为幻灯片上的动画来完成 这是您要找的吗 http www pptfaq com FAQ00597 htm http www pptfaq com FAQ00597 htm
  • `npm i` 命令有什么作用?

    什么是i在 npm CLI 中执行命令 我看到它是这样使用的 npm i package The iflag 是一个别名install so npm i package 是相同的 npm install package 从文档中 npm i
  • 如何创建可以跨多个页面或在框架/iframe 内访问的全局 JSP 变量?

    简而言之 如何在 JSP 中创建全局变量 以便可以跨其他 JSP 页面和 或内部框架 iframe 访问它 我尝试了 但出现错误 无法在单独的 jsp 页面中解析该变量 是否有可能在多个页面中访问 JSP 变量而无需求助于查询字符串 会话变
  • git tag -l 不会删除已删除的标签

    这是场景 我将我的存储库克隆到一个定期更新的目录 git pull 现在我又创建了一个目录并签出了相同的存储库 我必须创建一些标签 但我错误地创建了名称错误的标签 所以我从第一个目录中删除了标签 git tag d old git push
  • 错误:SPAN_EXCLUSIVE_EXCLUSIVE 跨度的长度不能为零

    我的 Android 应用程序出现问题 我有一个按钮和一个关联的事件 但是当我第一次单击时出现错误 跨度不能有零长度 但是当我第二次单击时 事件 onclick 运行良好 看看我的java代码 public class MainActivi
  • 如何调试 Apache mod_rewrite

    我对 mod rewrite 有两个主要问题 当我的规则无效时 不会报告任何有意义的错误 To reliably test each modification I have to erase Google Chrome s cache Th
  • 新的 Basecamp api 告诉我该地址没有 Basecamp 帐户

    我是 Basecamp api 的新手 在尝试最简单的示例时 curl u user pass H User Agent MyApp email protected cdn cgi l email protection https base
  • Pyspark 删除数据帧列中的多个字符

    看看 pyspark 我明白了translate and regexp replace帮助我了解数据框列中存在的单个字符 我想知道是否有一种方法可以在regexp replace or translate这样它就会解析它们并用其他东西替换它
  • 谁能解释一下这些 XSS 测试字符串吗?

    最近我发现了这个关于 XSS 和 Web 应用程序安全的教程 gt https www owasp org index php XSS Filter Evasion Cheat Sheet XSS Locator https www owa
  • 你能帮我使用 Selenium 单击“添加到购物车”按钮吗?

    我正在尝试做一个教程并在 python 中学习 Selenium 但是我似乎无法让 Selenium 使用 find element by class 或 find element by XPATH 单击 添加到购物车 按钮 问题是检查商品
  • DELETE_ON_CLOSE 的用处

    互联网上有很多示例展示如何使用StandardOpenOption DELETE ON CLOSE 例如 Files write myTempFile StandardOpenOption DELETE ON CLOSE 其他例子类似地使用
  • 在 Swift 中,如何根据一个数组对另一个数组进行排序?

    在 Swift 中 假设我有两个数组 var array1 Double 1 2 2 4 20 0 10 9 1 5 var array2 Int 1 0 2 0 3 现在 我想按升序对 array1 进行排序并相应地重新索引 array2