在 Swift 中修改字典数组

2023-12-13

我是 Swift 新手,在理解数组和字典的某些方面遇到了一些麻烦。

我有一个字典数组,我使用了类型别名 - 例如

typealias myDicts = Dictionary<String, Double>

var myArray : [myDicts] = [
["id":0,
    "lat”:55.555555,
    "lng”:-55.555555,
    "distance":0],
["id":1,
    "lat": 44.444444,
    "lng”:-44.444444,
    "distance":0]
]

然后我想迭代数组中的字典并更改“距离”键值。我是这样做的:

for dict:myDicts in myArray {

dict["distance"] = 5

}

或者甚至用许多不同的方法专门确保 5 是双精度数,包括例如

for dict:myDicts in myArray {

let numberFive : Double = 5

dict["distance"] = numberFive

}

我所有的尝试都会导致错误:

 @lvalue $T5' is not identical to '(String, Double)

它的表现就好像里面的字典是不可变的“let”而不是“var”。所以我随机尝试了这个:

for (var dict:myDicts) in myArray {

dict["distance"] = 5

}

这消除了错误,并且键确实在 for 循环中被分配了 5,但从长远来看,这似乎并没有真正修改数组本身。我究竟做错了什么?


Swift 中 for-in 循环中隐式声明的变量默认为常量(let),这就是为什么你不能直接在循环中修改它。

The for-in 文档有这个:

for index in 1...5 {
    println("\(index) times 5 is \(index * 5)")
}

在上面的例子中,index是一个常量,其值自动 在循环的每次迭代开始时设置。因此,它不 使用前必须声明。它是隐式声明的 只需将其包含在循环声明中,而不需要 let 声明关键字。

正如您所发现的,您可以通过显式声明它来将其设为变量var。但是,在这种情况下,您尝试修改一个结构体字典,因此,值类型并在分配时复制它。当你这样做时dict["distance"] = 5您实际上是在修改字典的副本,而不是存储在数组中的原始字典。

您仍然可以修改数组中的字典,只需直接按索引循环数组即可:

for index in 0..<myArray.count {
    myArray[index]["distance"] = 5
}

这样,您就一定会修改原始词典而不是它的副本。

话虽这么说,@matt 建议使用自定义类通常是最好的途径。

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

在 Swift 中修改字典数组 的相关文章

随机推荐

  • KeyError:使用 pytesseract.image_to_data 时出现“PNG”

    我尝试使用 pytesseract 函数将框放入图像文件中的文本周围image to data 但是在colab上遇到如下错误 KeyError Traceback most recent call last
  • 增加字符串中的数字值

    所以 我有一些带有数字和其他符号的字符串 并且我想将每个数字的值增加 1 例如 我想从这个字符串接收 test2check3 的 test1check2 我可以只用方法 replaceAll 来实现这个吗 i replaceAll d 类似
  • 使用回调时无法在 KOA 中设置 Header

    最近我在做一个使用 javascript 回调的新项目 我正在使用koa框架 但是当我调用这条路线时 function getCubes next var that this OLAPSchemaProvider LoadCubesJSon
  • 使用 File.listfiles() 获取 NullPointer 异常

    所以我的 Android Gallery 中有 3 个文件夹 我试图将这些文件夹的文件读入文件数组 然后从那里将图像源转换为实际的ImageViews 我的问题是我得到了NullPointerException引用我的文件数组时 这是一些代
  • “双图”中变化次数有限的最短路径

    假设我们在一组顶点上有两个有向正权图 第一个图代表铁路 第二个图代表公交车道 顶点是公交车站或火车站或两者 我们需要找到从 A 到 B 的最短路径 但我们不能改变交通工具类型超过 N 次 我试图修改 Dijkstra 算法 但它只适用于一些
  • Android 片段:何时使用隐藏/显示或添加/删除/替换?

    假设我希望将某个容器视图中的当前片段替换为另一个容器视图中的当前片段 是不是用替换的比较好 FragmentTransaction ft getSupportFragmentManager beginTransaction ft repla
  • SCIP 中的 LP 松弛

    我正在尝试使用 SCIP 命令行解决 MIP 并以 CPLEX LP 格式输入问题 然而 由于变量较多 优化需要花费大量时间 有没有办法计算 SCIP 中相同 MIP 的 LP 松弛解 或者任何其他方法来获得近似的 有些次优的解决方案 如果
  • R-Shiny 中的自动多文件下载

    我正在尝试弄清楚如何获得data frame对其自身进行子集化 然后为每个子集编写一个 csv 文件 我正在写一个shiny应用程序将为不同的仪器生成模板文件 我需要能够为每个批次 板 任何内容获取一个文件 显然 我们可以进行手动排序 但这
  • 拒绝Spring Security中同一角色的多个用户的访问

    我遇到过这样的情况 我的应用程序有多个角色 管理员 主持人 用户 主持人和用户可以编辑某些表格 所有权限都ok 但是 当我以用户 角色用户 身份登录并更改 url 中的 id 时 我可以简单地获取和编辑另一个用户 角色用户 的表单 如何拒绝
  • 如何在 Nashorn 的 javascript 中访问我的类中的方法

    在 Nashorn 中 可以访问 java 的预定义类 var ArrayList Java type java util ArrayList var list new ArrayList list add a list add b lis
  • PyInstaller .exe 文件提前终止且没有错误消息

    我一直在尝试使用 PyInstaller 将我的程序作为捆绑的 exe 文件分发给我的同事 该程序分析文本数据 可以从我的 CMD 完美运行 我使用 PyInstaller 3 6 Python 3 7 Windows 10 和 Anaco
  • iText 5 HTML+CSS 到 PDF/A-2:Helvetica 字体未嵌入错误

    以下代码用于使用 iText5 将带有 CSS 的 HTML 文件转换为 PDF A 2 此代码来自在线提供的示例 public static final String HTML D PDFA2 html sample html publi
  • 无法通过 Kendo UI 图表上的 xpath 定位 SVG 元素

    我确实尝试了一些 xpath 但似乎运气不佳 我想点击国家 然后点击图表 给出下面的屏幕截图 网站网址是 https demos telerik com kendo ui bar charts column 我尝试了xpath text t
  • 迭代 PriorityQueue 不会产生有序结果

    import java util class Priority public static void main String args PriorityQueue
  • python正则表达式中的匹配括号[重复]

    这个问题在这里已经有答案了 我有类似的东西 store s 结束行就像 1 家商店 我想使用Python正则表达式来匹配它 我尝试过类似的东西re match store s text 但它不起作用 这是我尝试过的代码 import re
  • Jenkins - 构建步骤之间的条件

    我想使用 Jenkins 构建一个 Maven 项目 但是 只有当 SVN 存储库中的某个文件发生更改 并且包含特殊密钥 时才必须构建项目 所以我的计划是创建一个包含两个构建步骤的作业 第一步执行一个 shell 或 python 脚本来检
  • Delphi非可视化TTree实现

    我正在寻找一种非可视持久树 TStringTree 实现 如果有人知道它的任何良好实施 请告诉我 Thanks 你会发现一个灵活的 非可视化的树结构DI 容器图书馆 商业 然而 正如其他人上面所指出的 开发自己的功能确实非常容易 只需添加您
  • /proc 的内核模块

    如何编写一个内核模块 在 proc 中创建一个名为 mymod 的目录 并在其中创建一个名为 mymodfile 的文件 该文件在写入时应接受 1 到 3 范围内的数字 并在读取时根据已写入的数字返回以下消息 1 当前系统时间 以微秒精度为
  • RenderScript 源代码在哪里

    我正在大学项目中研究 RenderScript 我们想要找到选择 RenderScript 代码运行位置的调度程序 在 CPU 上 GPU DSP 并研究它如何做出这种选择 问题是 我们找不到与调度程序相关的任何源代码 事实上 我们在源代码
  • 在 Swift 中修改字典数组

    我是 Swift 新手 在理解数组和字典的某些方面遇到了一些麻烦 我有一个字典数组 我使用了类型别名 例如 typealias myDicts Dictionary