You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中(String, Int)格式for循环用法及类型差异咨询

Swift字典遍历for循环详解

问题背景

在《Swift编程语言(Swift 5.7)》中看到如下代码,对第7行for (_, numbers) in interestingNumbers这种格式的for循环有疑问:把代码里的_换成其他名称后,这个名称在输出里没用到,想搞懂这类for循环怎么用,以及和其他for循环的区别。

对应的代码:

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (_, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
print(largest)

一、这类for循环的本质:字典的键值对遍历

你看到的写法是Swift里遍历字典键值对的标准方式:

  • 字典里的每个元素都是(键, 值)形式的元组,这里interestingNumbers的键是String(比如"Prime"),值是[Int]类型的数组,所以每个元组就是(String, [Int])。
  • 这里的_是Swift的通配符,意思是“我不需要这个值”——因为这段代码只需要字典里的数字数组(值部分),不需要对应的分类名称(键部分),用_可以忽略键,还能避免编译器报错“变量未使用”。

二、具体使用方法

  1. 同时用键和值:如果需要用到键,把_换成具体变量名就行,比如:
for (category, numbers) in interestingNumbers {
    print("分类:\(category),包含的数字:\(numbers)")
}
  1. 忽略其中一部分:
    • 不需要键就用_替代键的变量名,就像示例那样;
    • 要是只需要键不需要值,就写成for (category, _) in interestingNumbers;
  2. 单独遍历键或值:也可以直接用字典的keys或values属性,更直观:
// 只遍历所有分类名称(键)
for category in interestingNumbers.keys {
    print(category)
}

// 只遍历所有数字数组(值)
for numbers in interestingNumbers.values {
    print(numbers)
}

三、和其他for循环的差异

Swift常用的for循环主要有三种,和这种字典遍历的区别如下:

  1. 普通数组/序列遍历:
    • 格式:for element in 序列
    • 针对数组、字符串这类线性序列,直接取出每个元素,不用处理元组。
    • 例子:
    let primes = [2, 3, 5, 7]
    for prime in primes {
        print(prime)
    }
    
  2. 带索引的遍历(enumerated()):
    • 格式:for (index, element) in 序列.enumerated()
    • 用于需要同时获取元素位置和元素值的场景,返回的是(索引, 元素)元组——这里的第一个元素是整数索引,而字典遍历的第一个元素是自定义类型的键,这是核心区别。
    • 例子:
    let fruits = ["apple", "banana"]
    for (index, fruit) in fruits.enumerated() {
        print("第\(index+1)个水果:\(fruit)")
    }
    
  3. 字典键值对遍历:
    • 格式:for (key, value) in 字典
    • 专门针对字典类型,取出的是键值对元组;可以用通配符忽略键或值,这是它独有的特性,另外字典遍历的顺序是不确定的(Swift 3.0+后字典无序,除非用OrderedDictionary),而数组遍历是按顺序来的。

内容的提问来源于stack exchange,提问作者Daisy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:17:42