【发布时间】:2016-07-09 11:52:18
【问题描述】:
我想遍历任意 Swift 集合并获取元素及其索引。
基本上可以替代:
for (idx, el) in collection.enumerate() {
print("element at \(idx) is \(el)")
}
但这给了我真正的通用索引,而不仅仅是从 0 开始的连续整数。
当然,解决方案将成为接受任何类型集合的通用函数的一部分,否则差异不会很重要。
有没有比下面这样的幼稚循环更好的方法?
var idx = collection.startIndex, endIdx = collection.endIndex
while idx < endIdx {
let el = collection[idx]
print("element at \(idx) is \(el)")
idx = idx.successor()
}
这样的写作似乎很容易出错。我知道我可以将该代码转换为 sn-p,但如果可能的话,我想找到一个更简洁、更惯用的解决方案。
【问题讨论】:
-
从我的测试中 idx.dynamicType 是 Int 但你说通用索引我错过了什么吗?
-
@AliKıran:这取决于收藏。数组具有整数索引,但例如字符串具有特殊的 String.CharacterView.Index 类型。集合的索引也不必从零开始(例如数组切片)。
-
我希望链接到的“重复”可以解决您的问题。否则请告诉我,我会重新提出问题。
-
@MartinR 谢谢我明白了我只是误解了这个问题
-
@MartinR 谢谢,另一个问题的表述更为狭隘,但答案完全正确。不过,我认为这个问题的答案更好,更中肯。我不确定这种情况下的 SO 政策是什么;如果由我自行决定,我会留下两者。谢谢!
标签: swift