切片的获取
在swift中,所有的集合类型都有切片操作的默认实现,并且有一个接受 Range<Index> 作为参数的下标方法。比如:
let tempArray = ["one","two","three"]
let onePastFirst = tempArray.index(after:tempArray.startIndex)
let aSubSequences = array[onePastFirst..<tempArray.endIndex]
上面这段代码的作用等同于list.dropFirst()。
标准库中关于切片的方法
由于像 “从某个位置到结尾的切片” 或 “从开头到某个位置的切片” 因为这种需求比较常见,所以标准库中封装了一些方便调用的方法。
如:
使用dropFirst和dropLast来获取去掉首尾元素后的子列表。
使用prefix(n)和suffix(n)来获取列表中前n或后n个元素组成的子列表。
代码示例:
let arguments = CommandLine.arguments.dropFirst()
let intro = text.split(separator: " ").prefix(10)
let outro = text.split(separator: " ").suffix(10)
共享索引的问题
Collection协议要求切片的索引可以和原集合的索引互换使用。这就意味着即使在使用整数索引时,一个集合的索引也不一定以0开始,比如以下代码:
let city = ["beijing","shanghai","shenzhen","hangzou","tianjin","xian","nanjing"]
let subCity = city[2...4]
city.startIndex //0
city.endIndex //7
subCity.startIndex //2
subCity.endIndex //5
for city in subCity{
print(city)
}
如果这时候调用subCity[0],那么程序报错:“Index out of bounds”。 所以应该避免使用 for index in collection.indices 的方式去遍历集合。