SWIFT中的数组
这篇文章也在我的博客上发布:https://truongnn.me/2019/03/19/arrayslice-in-swift/
在本文中,让我们讨论Swift中的ArraySlice:
内容
- 介绍
- 创建一个ArraySlice
- 实际示例:为数组实现Chunk方法
介绍
该结构描述了Swift中数组的“切片”。
如图像所示,ArraySlice的startIndex并不总是零,这取决于我们如何“切片” Array
创建一个数组:
让我们检查一些如何创建ArraySlice的示例:
下降
让testArray = [1,2,3,4,5]
让arraySlice = testArray.dropLast()//返回ArraySlice [1,2,3,4]
后缀
让testArray = [1,2,3,4,5]
让arraySlice = testArray.suffix(2)//返回ArraySlice [4,5]
字首
让testArray = [1,2,3,4,5]
让arraySlice = testArray.prefix(2)//返回ArraySlice [1,2]
范围
让testArray = [1,2,3,4,5]
让arraySlice = testArray [1 .. <3] //返回ArraySlice [2,3]
实际示例:阵列的实现阻塞方法
给定一个数组,实现一个“块”方法,该方法将数组分成具有预定义大小的多个子数组:
让数组= [1,2,3,4,5,6]
令大小= 2
让结果= array.chunk(大小:大小)
//结果= [[1,2],[3,4],[5,6]]
让数组= [1,2,3,4,5,6,7]
令大小= 20
让结果= array.chunk(大小:大小)
//结果= [1,2,3,4,5,6,7]
让数组= [Int]()
让结果= array.chunk(大小:2)
//结果:空数组
让我们在Array的Extension中实现此方法:
扩展数组{
func chunk(size:Int)-> Array <Array > {
var结果= [Array ]()
var loopIndex = startIndex
而loopIndex <endIndex {
var arraySlice:ArraySlice !
如果让index = index(loopIndex,offsetBy:size,limitedBy:endIndex){
arraySlice = self [loopIndex .. <index]
loopIndex =索引
}其他{
arraySlice = self [loopIndex .. <endIndex]
loopIndex = endIndex
}
让array = Array(arraySlice)
result.append(array)
}
返回结果
}
}
逻辑很简单:将Array切成ArraySlice,每个ArraySlice的length = size,用以下方法构建subArray:
让array = Array(arraySlice)。
如果我们无法再对Array进行切片,则意味着“大小”大于Array.count或偏移量超出范围,只需中断While循环即可。
为此方法进行单元测试:
类ArrayExtensionTests:XCTestCase {
func test_chunk_whenArrayIsEmpty_shouldReturnEmptyArray(){
让数组= [Int]()
让结果= array.chunk(大小:2)
XCTAssertTrue(result.count == 0)
}
func test_chunk_whenArrayCanDivideBySize_shouldReturnArrayWithSizeEqualArraySizeDivideBySize(){
让数组= [1,2,3,4,5,6]
令大小= 2
让结果= array.chunk(大小:大小)
XCTAssert(result.count == 3,“结果应包含3个项目”)
}
func test_chunk_whenArraySizeModulBySize_shouldReturnArrayWithSizeEqualArraySizeDivideBySizePlusOne(){
让数组= [1,2,3,4,5,6,7]
令大小= 2
让结果= array.chunk(大小:大小)
XCTAssert(result.count == 4,“结果应包含4个项目”)
}
func test_chunk_whenSizeGreaterThanArraySize_should_ReturnArrayWithSizeEqualOne(){
让数组= [1,2,3,4,5,6,7]
令大小= 20
让结果= array.chunk(大小:大小)
XCTAssert(result.count == 1,“结果应包含1个项目”)
}
}
你怎么看? 让我知道您的问题并给我反馈。
谢谢阅读!