PLAYGROUND 可视化

由 王巍 (@ONEVCAT) 发布于 2015/09/23

在程序界,很多小伙伴都会对研究排序算法情有独钟,并且试图将排序执行的过程可视化,以便让大家更清晰直观地了解算法步骤。有人把可视化排序做得很正统明了,也有人把它做到了艺术层次

想在 Cocoa 中做一个可视化的排序算法演示可不是一件容易的事情,很可能你会需要一套绘制图形的框架,并且考虑如何在屏幕上呈现每一步的过程。但是在 Playground 中事情就变得简单多了:我们可以使用 XCPlayground 框架的 XCPCaptureValue 方法来将一组数据轻而易举地绘制到时间轴上,从而让我们能看到每一步的结果。这不仅对我们直观且及时地了解算法内部的变化很有帮助,也会是教学或者演示时候的神兵利器。

XCPCaptureValue 的使用方法很简单,在 import XCPlayground 导入框架后,可以找到该方法的定义:

func XCPCaptureValue<T>(identifier: String, value: T)

我们可以多次调用该方法来做图,相同的 identifier 的数据将会出现在同一张图上,而 value 将根据输入的次序进行排列。举一个完整的例子来说明会比较快,比如下面的代码实现了简单的冒泡排序,我们在每一轮排序完成后使用 plot 方法将当前的数组状态用 XCPCaptureValue 的方式进行了输出。通过在时间轴 (通过 “Alt+Cmd+回车” 打开 Assistant Editor) 的输出图,我们就可以非常清楚地了解到整个算法的执行过程了。

import XCPlayground

var arr = [14, 11, 20, 1, 3, 9, 4, 15, 6, 19,
2, 8, 7, 17, 12, 5, 10, 13, 18, 16] func plot<T>(title: String, array: [T]) {
for value in array {
XCPCaptureValue(title, value: value)
}
} plot("起始", array: arr) func swap(inout x: Int, inout y: Int) {
(x, y) = (y, x)
} func bubbleSort<T: Comparable>(inout input: [T]) {
for var i = input.count; i > 1; i-- {
var didSwap = false
for var j = 0; j < i - 1; j++ {
if input[j] > input[j + 1] {
didSwap = true
swap(&input[j], &input[j + 1])
}
}
if !didSwap {
break
}
plot("第 \(input.count - (i - 1)) 次迭代", array: input)
}
plot("结果", array: input)
} bubbleSort(&arr)

因为 XCPCaptureValue 的数据输入是任意类型的,所以不论是传什么进去都是可以表示的。它们将以 QuickLook 预览的方式被表现出来,一些像 UIImageUIColor 或者 UIBezierPath 这样的类型已经实现了 QuickLook。当然对于那些没有实现快速预览的 NSObject 子类,也可以通过重写

func debugQuickLookObject() -> AnyObject?

来提供一个预览输出。在上面的冒泡排序方法中,我们可以接收任意满足 Comparable 的数组,而绘图方法也可以接受任意类型的输入。作为练习,可以试试看把 arr 的全部数字都换成一些随机的字符串看看时间轴的输出是什么样子吧。

PLAYGROUND 可视化的更多相关文章

  1. 0、PlayGround可视化

    Tensorflow新手通过PlayGround可视化初识神经网络 是不是觉得神经网络不够形象,概念不够清晰,如果你是新手,来玩玩PlayGround就知道,大神请绕道. PlayGround是一个在 ...

  2. Swift开发学习(两):Playground

    Swift开发学习:Playground 大约 对于软件用户.游戏玩家,我一直提倡用户体验.也是用户,是各种开发工具的使用者.也会喜欢用户体验做得好的工具软件.这次苹果想开发人员所想,提供了一个能够玩 ...

  3. Swift开发学习(二):Playground

    http://blog.csdn.net/powerlly/article/details/29674253 Swift开发学习:Playground 关于 对于软件用户.游戏玩家,大家一直都在提倡用 ...

  4. 1.UI初认识

    前节:app是什么? app英文全称:application 应用程序,简称应用.也就是手机应用的简写 出处:http://www.cnblogs.com/mcj-coding/p/5098254.h ...

  5. 推荐!PlayGround:可视化神经网络

    https://cloud.tencent.com/developer/news/190352 http://playground.tensorflow.org PlayGround是一个在线演示.实 ...

  6. Swift开发第三篇——Playground

    本篇分为两部分: 一.Playground的延时运行 二.Playground的可视化 一.Playground的延时运行 Playground 就是提供一个可以即时编译的类似 REPL 的环境,他为 ...

  7. 使用Playground编写第一个Swift程序

    从控制台输出“HelloWorld”是我学习C语言的第一步,也是我人生中非常重要的一步.多年后的今天,我仍希望以HelloWorld作为第一步,与大家共同开启一个神奇.瑰丽的世界——Swift编程. ...

  8. 学习笔记TF047:PlayGround、TensorBoard

    PlayGround.http://playground.tensorflow.org .教学目的简单神经网络在线演示.实验图形化平台.可视化神经网络训练过程.在浏览器训练神经网络.界面,数据(DAT ...

  9. 《从零开始学Swift》学习笔记(Day4)——用Playground工具编写Swift

    Swift 2.0学习笔记(Day4)——用Playground工具编写Swift 原创文章,欢迎转载.转载请注明:关东升的博客 用Playground编写Swift代码目的是为了学习.测试算法.验证 ...

随机推荐

  1. 【OpenJ_Bailian - 2797】最短前缀(贪心)

    最短前缀 Descriptions: 一个字符串的前缀是从该字符串的第一个字符起始的一个子串.例如 "carbon"的字串是: "c", "ca&qu ...

  2. STC单片机掉电断电失电瞬间EEPROM数据保存处理办法(转)

    由于客户在请人设计开发一设备,但是设备用户处总停电,造成设备及其周边耗材损耗严重,因此请我司在现有STC为主要芯片的基础上做掉电瞬间EEPROM里的20个参数保存,上电后通过读取EEPROM中的参数回 ...

  3. linux tcpdump(转)

    转自 http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 默认启动 tcpdump 普通情况下,直接启动tcpdump将监 ...

  4. PAT甲级——1130 Infix Expression (25 分)

    1130 Infix Expression (25 分)(找规律.中序遍历) 我是先在CSDN上面发表的这篇文章https://blog.csdn.net/weixin_44385565/articl ...

  5. SpringBoot | SpringBoot启动错误

    Error starting ApplicationContext. To display the conditions report re-run your application with 'de ...

  6. jsp内置对象分析

    1.html表单的提交方式比较: 1.1.get方式:将表单内容经过编码之后 ,通过URL发送, 使用get方式发送时有255个字符的限制. 1.2.post方式:将表单的内容通过http发送,pos ...

  7. 自定义收索View

    1 .h文件 @interface SearchNavView : UIView @property (nonatomic, copy) void(^cancleBtnBlock)(void); @p ...

  8. Java的Cloneable接口还有深浅复制

    我的小记录 首先语法上,搞清除,Java有个Cloneable接口,但这个接口是没有定义方法的. 那实现了这个接口有什么用呢? 再看Object类中,有个clone()方法,这个方法提供一个浅复制的功 ...

  9. NUP2201MR

    NUP2201MR:双总线保护IC(瞬态抑制二极管),常用于USB总线的保护.

  10. vi编辑器查找

    当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢? 你在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了. 如 ...