大佬教程收集整理的这篇文章主要介绍了Swift:如何在Swift中声明一个二维数组(网格或矩阵)以允许随机插入,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的第一个想法是动态调整大小的数组.但Swift数组的边界不会自动增长.如果我尝试在索引5处放置一些超出其当前大小的内容,则会因超出范围异常而失败.
Swift或Cocoa中是否有一个支持随机访问网格的集合类. NSArray也不支持它.
struct Matrix2D<KeyElem:Hashable,Value> { var _storage:[KeyElem:[KeyElem:Value]] = [:] subscript(x:KeyElem,y:KeyElem) -> Value? { get { return _storage[x]?[y] } set(val) { if _storage[x] == nil { _storage[x] = [:] } _storage[x]![y] = val } } } var matrix = Matrix2D<Int,@R_772_10495@ng>() matrix[1,2] = "foo"
as DictionaryLiteralConvertible:
extension Matrix2D:DictionaryLiteralConvertible { typealias Key = (x:KeyElem,y:KeyElem) init(DictionaryLiteral elements: (Key,value)...) { for (key,val) in elements { self[key.x,key.y] = val } } } var matrix:Matrix2D = [(1,2):"foo",(2,3):"bar"]
数组后端版本
struct Matrix2D<T> { var _storage:[[T?]] = [] subscript(x:Int,y:int) -> T? { get { if _storage.count <= x { return nil } if _storage[x].count <= y { return nil } return _storage[x][y] } set(val) { if _storage.count <= x { let cols = [[T?]](count: x - _storage.count + 1,repeatedValue: []) _storage.extend(cols) } if _storage[x].count <= y { let rows = [T?](count: y - _storage[x].count + 1,repeatedValue: nil) _storage[x].extend(rows) } _storage[x][y] = val } } }
以上是大佬教程为你收集整理的Swift:如何在Swift中声明一个二维数组(网格或矩阵)以允许随机插入全部内容,希望文章能够帮你解决Swift:如何在Swift中声明一个二维数组(网格或矩阵)以允许随机插入所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。