我正在学习快速,并试图理解字典。我已经习惯了PHP,您可能会在其中编写以下内容…
$dataPoints = Array("A"=>1,"B"=>2,"C"=>3);
foreach($dataPoints as $value) {
echo($value);
}
在此示例中,将按以下顺序输出值:1、2、3
我的快速代码看起来像这样…
var dataPoints: Dictionary<String,Int> = ["A":1,"B":2,"C":3]
for (key, value) in dataPoints {
print(value)
}
但是,值以意外的顺序出现。我可以做些干净的事情来保持值的创建顺序,还是不能对字典进行快速排序?
正如已经回答的那样,词典的要点是未排序。Swift(和Objective-C)中有三种类型的集合
数组是项目的有序列表。当项目的顺序很重要时,请使用此选项。
字典是键和值的无序集合。当您要基于键有效地检索值时,请使用此选项。
一套是一袋无序的独特物品。如果您希望不按特定顺序收集唯一项,请使用此选项。
对于您的情况,顺序似乎对您很重要,但是您想存储某种类型的值对。也许您应该使用的是元组数组:
这样的事情,也许
let dataPoints = [("A", 1), ("B", 2), ("C", 3)]
for (letter, number) in dataPoints {
print("\(letter), \(number)")
}
哪个输出
A, 1
B, 2
C, 3
或者
如果您在创建项目之前不了解项目的顺序,但是基于键的自然排序,则可以执行以下操作:
let dict = [
"A" : 1,
"B" : 2,
"C" : 3
]
for key in dict.keys.sort() {
guard let value = dict[key] else { break }
print("\(key), \(value)")
}
在这种情况下,您将获得具有其默认排序顺序的键数组(如果您有其他要求,可以使用其他排序功能),然后根据该排序顺序输出键值。
问题内容: 什么之间的区别,以及何时该使用的呢? 例如,在Python中,如果我想打印字典,我只是,但是现在有2个其他选项。我应该如何以及何时使用它们? 问题答案: 一些区别: vs : 调试应用程序时,该功能在Xcode控制台中打印消息。 这是Swift 2中已删除且不再使用的变体。如果看到正在使用的旧代码,则可以安全地将其替换为。 回到Swift 1.x,没有在打印字符串的末尾添加换行符,而是
问题内容: 为了在使用Swift时与C API集成,我需要使用sizeof函数。在C语言中,这很容易。在Swift中,我处于类型错误的迷宫中。 我有以下代码: 第二行显示错误“’NSNumber’不是’T.Type’的子类型”。为什么会这样,我该如何解决? 问题答案: 使用sizeof如下: 使用类型作为参数。 如果您想要变量的大小,可以将该字段传递给。 像这样: 或更简单地说(由user1020
问题内容: NS和非NS类之间有什么区别?特别是vs ?是否代表围绕核心非功能性的某种包装器? 问题答案: Swift 3 为现有Foundation类类型引入了一些新的 覆盖值类型 ,例如for ,for 等。完整列表和详细信息可以在下面找到 SE-0069变异性和基础价值类型 一些原因是 提供适当的值语义, 而不是可变且不可变的变体, 更多的“ Swifty” API。 新的叠加层类型应提供相
问题内容: 我一直在尝试实现单例,以用作我从网络上传到我的iOS应用的照片的缓存。我在下面的代码中附加了三个变体。我试图使版本2正常工作,但是它导致了我不理解的编译器错误,并希望就我做错的事情寻求帮助。变体1进行缓存,但我不喜欢使用全局变量。变体3并没有进行实际的缓存,我相信这是因为我在赋给var ic = ....的赋值中获得了副本,对吗? 任何反馈和见解将不胜感激。 谢谢Zvi 问题答案: 标
我正在使用Swift中的实现实质上是一个缓存。演出远未达到我的预期。我读过一些其他问题,例如关于数组排序的问题,它似乎暗示是答案(如果您准备接受它带来的更改)。但是,即使在编译时,性能也比其他语言差。我使用的是Swift 1.0版(Swift-600.0.34.4.8)。 下面是一个简单的例子来说明这个问题: 使用编译时,运行时间超过两秒: 相比之下,这个Java实现: 又快了6倍: 难道仅仅是复
问题内容: 要找到第一个,请使用: 我如何找到第二次出现? 问题答案: 项目清单 您可以按照以下步骤在剩余的数组切片中再次搜索元素的索引: 编辑/更新: Xcode 11•Swift 5.1或更高版本 测试: