gpt4 book ai didi

swift - 使用 enumerated , zip 方法并迭代索引

转载 作者:行者123 更新时间:2023-11-28 15:12:47 32 4
gpt4 key购买 nike

我无法理解这段代码,我需要很少的帮助。下面的例子来自 swift 标准库。此示例遍历集合的 indiceselements,构建一个由 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 访问 集合中的元素

for i in shorterIndices {
print(names[i])
}
// Prints "Sofia"
// Prints "Mateo"

在第一组代码中,if 语句如何计算字母不超过五个的名字。因为 name.count5。和 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

最佳答案

理解这段代码的关键是理解zip是什么做。它从两个单独的序列创建一个元组对序列。如果您选择单击 zip在 Xcode 中,它提供了这个例子:

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) loop 依次获取每个元组并将一个单词分配给 word和一个数字 number .第一次通过循环,word"one"number1 .

在您的例子中,由 zip(names.indices, names) 创建的元组对包含集合中的索引和集合中的名称。 for 循环查看一个 (index, name)一次配对。

第一次通过循环,name"Sofia"i"Sofia" 的索引在集合中。

如果"Sofia"的长度是<= 5它的索引被添加到新数组中。在这种情况下 name.count5因为"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 时数组,稍后可以使用它从 Set 中检索名称。

关于swift - 使用 enumerated , zip 方法并迭代索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47376516/

32 4 0