我无法理解这段代码,我想要的帮助不大。下面的例子来自swift标准库。此示例迭代集合的indices
和elements
,构建一个由indices
个字母组成的列表,其中包含五个或更少的字母。
let names: Set = ["Sofia", "Camilla", "Martina", "Mateo", "Nicolás"]
var shorterIndices: [SetIndex<String>] = []
for (i, name) in zip(names.indices, names) {
if name.count <= 5 {
shorterIndices.append(i)
}
}
现在shorterIndices
数组在名称集中保存了较短名称的indices
,您可以使用indices
来访问集合中的elements
。
for i in shorterIndices {
print(names[i])
}
// Prints "Sofia"
// Prints "Mateo"
在第一组代码中,if
语句如何能够计算五个或更少字母的名称。因为name.count
是5
。并且shorterIndices.append(i)
包含names
Set的每个值。我是编程新手,我无法理解这个例子。有人可以逐行解释吗?
@vacawama检查一下:
let names: Set = ["Sofia", "Camilla", "Martina", "Mateo", "Nicolás"]
for (i, name) in zip(names.indices, names) {
print("\(names[i]): \(name.count)")
}
//prints
Nicolás: 7
Martina: 7
Camilla: 7
Mateo: 5
Sofia: 5
现在检查一下
let names: Set = ["Sofia", "Camilla", "Martina", "Mateo", "Nicolás"]
for (i, name) in zip(names, names) {
print("\(i): \(name.count)")
}
//prints
Nicolás: 7
Martina: 7
Camilla: 7
Mateo: 5
Sofia: 5
答案 0 :(得分:1)
理解此代码的关键是了解zip
的作用。它从两个单独的序列创建一系列元组对。如果您选择单击Xcode中的zip
,则会提供以下示例:
let words = ["one", "two", "three", "four"]
let numbers = 1...4
for (word, number) in zip(words, numbers) {
print("\(word): \(number)")
}
// Prints "one: 1"
// Prints "two: 2
// Prints "three: 3"
// Prints "four: 4"
逻辑上,zip
创建一个序列,如果变成数组,则为[("one", 1), ("two", 2), ("three", 3), ("four", 4)]
。然后,for (word, number)
循环依次获取每个元组,并将一个单词分配给word
,将一个数字分配给number
。第一次循环,word
为"one"
,number
为1
。
在您的情况下,zip(names.indices, names)
创建的元组对包含集合的索引和集合中的名称。 for循环一次只查看一个(index, name)
对。
第一次循环时,name
为"Sofia"
而i
是该集合中"Sofia"
的索引。
如果"Sofia"
的长度为<= 5
,则其索引将添加到新数组中。在这种情况下,name.count
为5
,因为"Sofia"
有5
个字母,因此其索引会被添加。
集合没有排序,因此名称可能不会按照您期望的确切顺序进行迭代,但每个名称都与其正确的索引配对。将for循环更改为:
for (i, name) in zip(names.indices, names) {
print("name = \(name)")
print("name.count = \(name.count)")
print("names[i] = \(names[i])")
print("-----")
}
看看发生了什么。当我这样做时,我得到了:
name = Nicolás name.count = 7 names[i] = Nicolás ----- name = Martina name.count = 7 names[i] = Martina ----- name = Camilla name.count = 7 names[i] = Camilla ----- name = Mateo name.count = 5 names[i] = Mateo ----- name = Sofia name.count = 5 names[i] = Sofia -----
请注意,names[i]
与name
不同,因为i
中的索引Set
与名称相对应。当此索引附加到shorterIndices
数组时,稍后可以使用它从集合中检索名称。