- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Swift 的新手,我正在探索如果在使用范围迭代集合时修改集合会发生什么。我不明白为什么这两个循环有不同的行为:
var things = ["a", "b", "c"]
for i in 0..<things.count {
print("i: \(i) count: \(things.count) value: \(things[i])")
if i == 1 {
things.append("x")
}
}
// i: 0 count: 3 value: a
// i: 1 count: 3 value: b
// i: 2 count: 4 value: c
对比
var things = ["a", "b", "c"]
for i in things.startIndex...things.endIndex {
print("i: \(i) count: \(things.count) value: \(things[i])")
if i == 1 {
things.append("x")
}
}
// i: 0 count: 3 value: a
// i: 1 count: 3 value: b
// i: 2 count: 4 value: c
// i: 3 count: 4 value: x
我创建了这个 Array 类扩展,这样我就可以看到 Range 文字何时访问数组的属性:
extension Array {
var myCount: Int {
print("myCount (\(self.count))")
return self.count
}
var myStartIndex: Int {
print("myStartIndex (\(self.startIndex))")
return self.startIndex
}
var myEndIndex: Int {
print("myEndIndex (\(self.endIndex))")
return self.endIndex
}
}
如果我使用这些属性而不是普通属性,我会得到:
myCount (3)
i: 0 count: 3 value: a
i: 1 count: 3 value: b
i: 2 count: 4 value: c
和
myStartIndex (0)
myEndIndex (3)
i: 0 count: 3 value: a
i: 1 count: 3 value: b
i: 2 count: 4 value: c
i: 3 count: 4 value: x
我一定是漏掉了什么,因为这感觉很神奇!似乎正在重新评估 endIndex
,但 count
没有。给了什么?
最佳答案
这是因为在第一段代码中,您使用了半开范围运算符 ( ..<
),而在第二段代码中,您使用了正常范围运算符 ( ...
)。 它们是不同的。从 apple docs 开始:
The half-open range operator
(a..<b)
defines a range that runs from a to b, but doesn’t include b.
因此,如果 for
为 4,则第一段代码中的 things.count
循环不会继续,因为范围 (0 - 4) 与半开范围运算符一起使用时,仅当 i
为 0、1、2 或3.
如果您使用 ...
而不是 ..<
,第一段代码的结果将与第二段代码相同。
关于arrays - 在迭代其范围时修改 Swift 数组 - 0 计数与 startIndex 到 endIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47958458/
我正在通过签名和分发向导发布我的应用程序,但我得到了 this没有其他信息的错误。如果有人对此错误有任何经验,您能解释一下我应该怎么做才能继续吗? 最佳答案 包名称中的句点过多。 关于android
我有以下代码 public static void main(String args[]) throws Exception { String mySite = "StackOverflow"
看程序: let s = "1" print(s.startIndex) print(s.index(before: s.endIndex)) print(s.index(before: s.endI
我的代码中有一个奇怪的错误。我正在用 Swift 构建一个 iOS 应用程序。该代码包含以下功能: func generateAttrString(path: String?) { do {
我在一个文本编辑器上工作,当我在上面输入文本然后删除它时出现错误: StartIndex cannot be less than zero 指向这段代码: String line = rtb.Text
我有以下 C# 代码: ArticleContent = ds1.Tables[0].Rows[i]["ArticleContent"].ToString(); if (ArticleContent.
我希望从一个特定的起点将特定长度的内容从一个缓冲区复制到另一个缓冲区。我检查了 memcpy() 但它只需要复制内容的长度,而我也想指定起始索引。 是否有任何函数可以做到这一点,或者有什么好的方法可以
经过大量的调试,我终于发现,在使用 v2 YouTube-API 获取评论时,看似 Youtube 只发布前 100 条评论。我终于尝试使用: curl -Lk -X GET "http://gdat
Linq-to-Entities 似乎无法识别 IndexOf(String,Int)。 Int 是起始索引。有谁知道不需要实现的解决方法?我想保持可查询,而不设置 tolist 或 IEnumera
这个问题在这里已经有了答案: How does String.Index work in Swift (4 个答案) 关闭 6 年前。 我收到 startIndex 错误。错误是“‘string.i
这个问题已经有答案了: Get index of each capture in a JavaScript regex (8 个回答) 已关闭 7 年前。 我在正则表达式结果方面遇到了一些困难。基本上
问题基本上说明了一切。假设我有一个(排序的)列表,可以包含从1K到1M的任何项目。我有一个starting index和一个ending index。如果我使用ArrayList.sublist(st
我与 Swift Slice 发生冲突,认为 firstIndex 应该是切片的第一个索引,在源域中(不确定它还有什么用)。显然不是这样的: let ary = map(1...100) { i in
我想问一下是否有某种实用函数可以在提供索引的同时提供数组连接。也许jQuery的Prototype提供了这个,如果没有,我自己写:) 我期望的是这样的 var array= ["a", "b", "c
我有这个代码。我正在尝试仅检索文本“第一个程序”。考虑到我知道索引为 25,字符串的总长度为 35。 string text="Hello world ! This is my first progr
我将在 BiqQuery 中获取大约 500,000 到 1,000,000 行。我们将其限制为偏移量和最大值。在本例中,pageSize = max 和 startIndex = offset。 我
我目前使用带有起始索引和长度的 substringWithRange(): let str = "Hello World" let index = 0 let length = 3 str.subst
我从 rangeOfString 方法接收到一个 Range String.Index。 searchParagraphs = ress.rangeOfString("\n") 现在我想证明 star
我使用 Google Analytics Reporting Api V3 提取数据与 Google APIs Python client library ,我希望我的结果采用给定的索引格式或将所有数
我的 C# 代码中有以下方法: /// /// Removes the first (leftmost) occurence of a from a . /// /// The string t
我是一名优秀的程序员,十分优秀!