单元素数组半开区间切片疑问:为何0..<0与1..<1均返回空ArraySlice?
为什么
0..<0和1..<1切片操作都返回空ArraySlice? 其实核心原因得从Swift里半开区间(a..<b)的基础规则说起:
半开区间的定义是包含起始索引a,但绝对不包含结束索引b,而且有个关键判定逻辑:当起始索引a大于等于结束索引b时,这个区间本身就是空的——不管你是在什么集合上做切片操作,这个规则都适用。
咱们结合你的例子拆解一下:
- 对于
oneNumArr[0..<0]:起始索引和结束索引都是0,满足a >= b的条件,这个区间里没有任何可包含的元素,所以切片结果就是空的ArraySlice([])。 - 对于
oneNumArr[1..<1]:同样起始和结束都是1,符合a >= b,区间为空。哪怕这里的1已经超出了原数组oneNumArr的有效索引范围(原数组长度为1,有效索引只有0),半开区间的空判定逻辑优先级更高,所以切片结果还是空。
反过来对比oneNumArr[0..<1],这里起始0小于结束1,区间包含索引0的元素,所以返回[0],这也正好印证了半开区间的核心规则。
内容的提问来源于stack exchange,提问作者chlkdst
相关产品推荐
相关产品推荐

