在 Swift 的嵌套循环中从特定索引枚举字符串
Posted
技术标签:
【中文标题】在 Swift 的嵌套循环中从特定索引枚举字符串【英文标题】:Enumerate String from specific index in nested loop in Swift 【发布时间】:2020-01-28 09:12:30 【问题描述】:使用enumerated()
方法从String
获取字符
let str = "Hello"
for (i,val) in str.enumerated()
print("\(i) -> \(val)")
现在尝试在 for
循环中枚举相同的字符串,但从 i 位置如
for (i,val) in str.enumerated()
print("\(i) -> \(val)")
for (j,val2) in str.enumerated()
// val2 should be from i postion instead starting from zero
如何枚举和设置j
的位置应该从i
开始?
谢谢
【问题讨论】:
【参考方案1】:您可以使用dropFirst()
在字符串中以特定位置开始创建视图:
for (i,val) in str.enumerated()
print("i: \(i) -> \(val)")
for (j, val2) in str.dropFirst(i).enumerated()
print("j: \(i+j) -> \(val2)")
如果要获取原始字符串对应的索引,则需要在第二个循环中添加i
,否则j
将持有dropFirst()
创建的视图中的索引
【讨论】:
【参考方案2】:您可以使用for in
和str.indices
并在外部循环的基础上启动内部循环。
let str = "abc"
for i in str.indices
for j in str[i...].indices
print(str[j])
输出:a b c b c c
(来自@LeoDabus的建议)
【讨论】:
这是预期的,因为 enumerated() 方法返回偏移量而不是索引。请注意,每次迭代都会不必要地从 startIndex 偏移索引。顺便说一句,您也应该将 StringProtocol 或集合本身扩展到 englobe 子字符串。查看此帖子***.com/a/54877538/2303865for index in str.indices for idx in str[index...].indices print(str[idx])
【参考方案3】:
如果我正确理解了问题陈述,则 OP 需要这个 -
你好你好lloloo
我们可以使用苹果提供的suffix
方法。
let str = "Hello"
var lengthOfString = str.count
for (i, val) in str.enumerated()
print(String(str.suffix(lengthOfString - i)))
我们不需要上面for循环中的val
,所以我们可以重写上面的for循环如下。
var str = "Hello"
var lengthOfString = str.count
for i in 0..<lengthOfString
print(String(str.suffix(lengthOfString - i)))
上述两个 for 循环都会给出相同的期望输出。
【讨论】:
以上是关于在 Swift 的嵌套循环中从特定索引枚举字符串的主要内容,如果未能解决你的问题,请参考以下文章