Schwartzian Transform(施瓦茨变换)

先普及下概念,看http://en.wikipedia.org/wiki/Schwartzian_transform  或者 看IntermediatePerl 中的9.4

在平时工作中,我们会经常接触到一些对文件内容做排序的工作。

像一般的升序排序,我会用sort命令来完成。

但是有些复杂的排序,比如,按第一列升序,再按第二列降序排,...等这种多级排序,我们就需要用到Schwartzian变换。

Schwartzian Transform基本格式如下,建议使用下列排版,如果写到一行,就很难看。

@sorted = map  { $_->[0] }
          sort { $a->[1] cmp $b->[1] }
          map  { [$_, foo($_)] }
               @unsorted;

或者

@sorted = map  $_->[0],
          sort { $a->[1] cmp $b->[1] }
          map  [$_, foo($_)],
               @unsorted;

扩展一下,如果有N级排序,可以写成

@sorted = map  $_->[0],
          sort { $a->[1] cmp $b->[1]
              or $a->[2] cmp $b->[2]
              ... ...
              or $a->[N] cmp $b->[N]}
          map  [$_, foo($_)],
               @unsorted;

举例说明
我想将文本txt中的第一列按升序排列,当第一列数值相同时,第二列按降序排列,当第二列相同时,第三列按升序排列。txt内容如下
4 6 3
4 5 1
1 2 3
1 9 0
2 0 5
3 6 2
2 0 8
2 0 6

脚本如下
$cat sort.pl
#!/usr/bin/perl  
my @sort_txt = map $_->[0],
               sort {$a->[1] <=> $b->[1]
                  or $b->[2] <=> $a->[2]
                  or $a->[3] <=> $b->[3]}
               map [$_, (split)], <>;
print @sort_txt;

$a->[N] <=> $b->[N] 就是升序排列

$b->[N] <=> $a->[N] 就是降序排列


结果
$perl sort.pl txt 
1 9 0
1 2 3
2 0 5
2 0 6
2 0 8
3 6 2
4 6 3
4 5 1


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
许瓦兹引理:从一道加利福尼亚大学伯克利分校数学系博士生试题谈起 作 者: 佩捷 著 出版时间:2014 丛编项: 《数学中的小问题大定理》丛书 内容简介 《许瓦兹引理:从一道加利福尼亚大学伯克利分校数学系博士生试题谈起》系统地介绍了许瓦兹引理、保角映射以及复函数的逼近,并且着重地介绍了Caratheodory和Kobayashi度量及其在复分析中的应用。论述深入浅出,简明生动,读后有益于提高数学修养,开阔知识视野。《许瓦兹引理:从一道加利福尼亚大学伯克利分校数学系博士生试题谈起》可供从事这一数学分支相关学科的数学工作者、大学生以及数学爱好者研读。 目录 1 几道数学竞赛培训题 2 保角映射 3 一道西德竞赛题 4 Schwarz引理 5 同时代的两位Schwarz 6 一个伯克利问题 7 中国大学生夏令营试题 8 与非欧几何的联系 9 与多复变函数论的联系 10 复函数的逼近 11 与插值问题的联系 12 Caratheodory和Kobayashi度量及其在复分析中的应用 1 序言 2 单值化定理 3 源自于Schwarz引理和Schwarz-Pick引理的推动 4 关于小林度量的基本事实 5 关于Caratheodory度量的一些基本事实 6 小林度量和Caratheodory度量的比较 13 陆启铿论Schwarz引理 附录 线性变换与罗巴切夫斯基几何 1 罗巴切夫斯基几何在圆上的欧几里得图像 2 给定附标的两点间的非欧距离的计算法 3 非欧几里得圆周 4 曲线的非欧长度 5 非欧几里得面积 6 远环 7 超环 8 罗巴切夫斯基几何在平面上的欧几里得图像 参考文献 编辑手记
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值