图书 •
783 引用 •
157 回帖 •
3 关注
博客
关注
-
10.4 连接 接着上面这个订单例子,我们希望把两份文件中订单号相同但内容不同的记录挑出来之后。将字段(订单号除外)都拼到一起对照着看。也就是要想形成一个两倍字段数(除订单号)的数据表。 我们 ..
-
[链接]10.3 归并 假如有两个 Excel 文件,比如前面说的订单表,可能由两个人分别制作,其中就可能会有些重复的记录,我们需要把这些重复记录挑出来,然后合并成一个没有重复记录的表。 本来 ..
-
10.2 外键 有了主键,也就能够唯一标识一条记录了。然后,我们就能建立不同数据表的记录之间的关联了。 先生成两个有主键的表用来做实验,简单起见用整数做主键,但被故意打乱了次序。 A B C ..
-
10.1 主键 在讲结构化数据概念时,我们说过数据表的字段有名字,但记录却没有名字。那么我们用什么办法来标识一条记录和另一条记录的不同呢?我们知道,每条记录都对应着某个事物的信息,到底是哪个呢 ..
-
9.4 扩展和转置 分组后再汇总,通常会得到一个比原集合更小的集合,相当于做了聚合。那么,有没有分组的逆运算,用一个较小的数据表通过某种规则计算出一个更大的数据表呢? 我们把这类运算称为扩展或 ..
-
9.3 有序分组 我们说过,排列、序列这些集合都是有序的,经常会有成员的位置信息参与到计算中。分组也不例外,分组键也有可能是和成员序号相关的。 比如,我们想把人员表每 3 个分成一组: A 1 ..
-
[链接]9.2 枚举与对齐 将分组键相等的成员分到一个组,这种分组称为等值分组。等值分组满足这样两个特点: 1) 原集合的所有成员都在且只在唯一的组中; 2) 没有一个组是空集; 满足这种特点 ..
-
9.1 分组与汇总 当事物比较多的时候,人们会习惯将这些事物按属性分成若干类别,然后考察每个类别的一些汇总信息,这个操作表现在结构化数据上就叫分组。分组的具体动作为:把一个数据表中的记录按某个 ..
-
8.5 字段上的计算 我们前面说过,结构化数据在行和列方向的能力是不对称的,方便的批量运算通常只对行方向提供,而列总是以独立的个体出现。但我们在个别时候也需要对列方向也进行一些整体运算,也就是 ..
-
[链接]8.4 循环函数 即然排列(序表也是排列)都可以看成是序列,那么针对这些对象应该也能使用循环函数了,我们已经用过 new()和 derive() 了,再来试试以前学过的循环函数,继续使 ..
-
[链接]8.3 序表生成 为了进一步学习排列上的运算,我们需要一个记录数多一点的序表,比如前面用过的四个字段的序表:name、sex、weight、height,能产生上百条记录再来做实验就方 ..
-
8.2 序表与排列 有了结构化数据的基本概念后,我们来学习如何处理这种数据,也就是在前言中说的本书的后半部分内容。 用于处理结构化数据的程序语言中,当前应用最广的是 SQL。SQL 全称是 S ..
-
8.1 结构化数据 从这一章起,我们开始学习在日常工作中天天都要打交道的表格数据及其处理手段。 在前面合并 Excel 文件的例子中,其实我们已经见识过这种表格了: [图片] 第一行是标题,解 ..
-
[链接]7.3 日期与时间 与时间相关的处理和计算也很常见,SPL 有三种数据类型:日期、时间、日期时间。 日期数据就只有日期信息,没有时间信息;时间数据只有时间信息,没有对应的日期信息;而日 ..
-
7.2 拆分合并 我们已经会用循环函数和 mid 把字符串拆成单个的字符序列,因为这种情况很常用,SPL 提供了 split 函数。s.split()就相当于 len(s).(mid(s,~, ..
-
[链接]7.1 字符串 到现在这止,我们在程序中处理过的数据,除了 output 时有个少量文字外,都是数值或数值构成的序列。其实,计算机还能方便地处理文字,在程序语言中,我们把这些文字称为字 ..
-
6.3 可复用脚本 学到现在,我们都在一个网格里写代码。 这个网格可以被保存成一个扩展名为.dfx 的文件,我们称它为一个脚本。 现在我们学会了写自定义函数被重复调用,但是这个函数只能在一个脚 ..
-
[链接]6.2 递归 * 有了自定义函数就可以写出递归程序了,我们再来看阶乘运算,这是个好例子。 我们知道,n!=(n-1)!*n,也就是说,如果我们知道 (n-1)! 后,就可以再用乘法来计 ..
-
6.1 自定义函数 还是假定没有阶乘函数,现在想计算组合数[图片]。 A B C 1 10 4 2 =1 for A1 >A2=A2*B2 3 =1 for B1 >A3=A3*B ..
-
[链接]5.7 Lambda 语法 * 回顾一下 A.pos(x) 和 A.select(x) 这两个函数,我们说前者不是循环函数,参数 x 中不能用 ~、#这些符号,而后者是循环函数,参数中 ..
-
[链接]5.6 排序相关 为了解决数字黑洞问题,我们已经写了好几种排序代码了。排序确实是很常见的动作,所以 SPL 直接提供了排序函数。 A.sort() 将返回将 A 的成员从小到大排列的序 ..
-
5.5 定位选出 从序列中取出子序列(也就是集合取子集)是常见运算,我们已经学过用 to 函数和数列根据成员的位置取出子序列。 有时候我们希望从序列尾部按倒数次序取成员,当然可以用序列长度计算 ..
-
[链接]5.4 迭代函数 * 我们还可以用更基础的迭代函数来实现不用临时变量完成e的计算。 序列 A 的迭代函数 A.iterate@a(x,a) 有两个参数 x 和 a,先不管这里的 @a, ..
-
[链接]5.3 循环函数进阶 SPL 在循环函数中提供了充当循环变量的 ~ 符号,可以简化许多原本要用循环语句来写的代码。但我们知道,针对序列的循环语句还提供了获取循环序号的语法(在循环变量前 ..
-
5.2 循环函数 前面我们用循环语句完成针对序列成员的求和、最大 / 最小值运算,但循环语句很麻烦,要先设置初始值再一步步计算。SPL 考虑到这一点,提供了一些针对序列的常用函数。 A B 1 ..