Swift Playground 中的二维数组
Posted
技术标签:
【中文标题】Swift Playground 中的二维数组【英文标题】:2D Array in Swift Playground 【发布时间】:2016-03-29 14:48:01 【问题描述】:我正在尝试为我的游戏编写关卡生成器,因此我正在 Swift 操场上对其进行测试。我的关卡存储在 2D Swift 数组中。一切都很好,只是我无法以有用的方式查看数组数据。因为是拼图游戏中的关卡数据,所以我希望看到排列整齐的行和列。但是,该数组目前只是调整控制台大小的单行。我怎样才能看到排列整齐的行和列? 这是我当前的输出:
[[" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", "&", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", "&", "&", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", "&", "&", "&", " ", "&", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " "], [" ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " "], [" ", " ", " ", " ", " ", " ", "&", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " "], [" ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " "], [" ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " "], [" ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", " ", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", "&", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", " ", "&", " ", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
我可以通过调整控制台的大小得到一个不错的结果,但必须有更好的方法来做到这一点。
【问题讨论】:
【参考方案1】:如果你想在控制台中表示你的二维数组,其内容对齐,我的建议是让保存数组的类符合协议CustomStringConvertible
。
为此,您必须创建一个 description
计算属性,这是我们进行格式化的地方:我们将内部数组转换为字符串并使用行分隔符将它们连接起来。
对协议的一致性使得对象在打印时输出计算属性的结果。
例子:
class BigArrayRepresenter: CustomStringConvertible
var bigArray: [[String]] = []
init(bigArray: [[String]])
self.bigArray = bigArray
var description: String
return bigArray.map String($0) .joinWithSeparator("\n")
使用你的数组:
let source = [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", "&", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", "&", "&", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", "&", "&", "&", " ", "&", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " "], [" ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " "], [" ", " ", " ", " ", " ", " ", "&", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " "], [" ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " "], [" ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " "], [" ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", " ", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", "&", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", " ", "&", "&", "&", "&", "&", "&", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", " ", "&", " ", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "&", "&", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
let representer = BigArrayRepresenter(bigArray: source)
print(representer)
我们得到这个结果:
【讨论】:
【参考方案2】:您可以在二维数组中放置任意数量的换行符,以使数据看起来更漂亮:
let array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
【讨论】:
我正在以编程方式添加到数组中,因此我无法使用该方法【参考方案3】:答案:编写您自己的UIView
子类,并使用XCPlaygroundLiveViewable
protocol 显示它。
【讨论】:
以上是关于Swift Playground 中的二维数组的主要内容,如果未能解决你的问题,请参考以下文章