Array类

继承List,而List又继承Iterable,Positional,Cool,这样说明Array是有序的,可迭代的数据列表。和Perl 5 一样,Perl 6也有数组push/pop/shift/unshift/的方法,不过push/unshift的如果是数组,则会保留数据结构,而不会展开。

ARRAY.pop
ARRAY.shift
ARRAY.push: VALUES
ARRAY.push(VALUES)
ARRAY.unshift: VALUES
ARRAY.unshift(VALUES)
#不像Perl5中,会把VALUES数组flatten,Perl6会保留数据结构 #可以同时指定多个值,用逗号隔开
ARRAY.append(LIST)
ARRAY.append: LIST
ARRAY.prepend(LIST)
ARRAY.prepend: LIST
#append就像perl5中的push了,会flatten ARRAY.splice(START, ELEMS?, REPLACEMENT?)
#删除,替换,这个方法会修改原数组
#返回删除的部分 ARRAY.shape
#返回数组的维度,相当于R的dim()

需要注意

  • append 才是Perl5中的 push,6默认的push是保留数据结构的
  • prependunshift 也类似
  • splice 是会修改数组的而不是简单的获取

继承自List类

基本操作

LIST.elems     #list中元素个数
LIST.end #最后一个元素的index,perl5中用 $#LIST
LIST.keys #返回indexes数组 0..(@list.elems-1)
LIST.values
LIST.kv #返回index,value的Pair
LIST.pairs #返回hash那样的
LIST.join(SEP)
LIST.map(CODE)
#可以根据CODE里面的需求,传入同时一个或多个元素,不限于一个 LIST.Bool #是否有元素
LIST.Str # .join(' ')之后返回一个字符串,相当于简便的join
LIST.Int # .elems LIST.Numeric
LIST.sum #如果有元素无法转成数字,throw an exception

获取部分元素

LIST.head(NUMBER)
#返回前几个,默认是一个,借鉴linux的head/tail
LIST.tail(NUMBER) LIST.pick(COUNT)
#不重复取样,不放回取样
#如果传入*,表示COUNT大于等于数组长度,相当于打乱了整个数组顺序返回 LIST.roll(COUNT)
#有放回取样,数值完全可以大于LIST长度
如果传入*,返回一个lazy, infinite sequence of randomly chosen elements

匹配、筛选、分类

LIST.flat
LIST.flatmap(CODE) #flat之后再map LIST.grep(MATCHER, :RETURN_AS)
#相对Perl5增加了:RETURN_AS,可以是:k,:v,:kv,:p LIST.first(MATCHER, :RETURN_AS, :FROM_END)
#查找第一个匹配的返回
#:end search should be from the end of the list
#:k,:kv,:p,并没有:v classify MAPPER, LIST
LIST.classify(MAPPER)
#按条件分类,分类的类别作为key,分类的值作为value,返回一个hash
#例如,按奇偶数分类
say (1, 7, 6, 3, 2).classify: { $_ %% 2 ?? 'even' !! 'odd' };
#even => 6 2, odd => 1 7 3
#例如,按转换成字符串的长度分类
say ('hello', 1, 22/7, 42, 'world').classify: { .Str.chars };
#1 => 1, 2 => 42, 5 => hello world, 8 => 3.142857

翻转、滚动,去重复,排序

LIST.eager
#我没看懂这个有什么鸟用
LIST.reverse
LIST.rotate
#这个shift前几个,append到数组末尾,相当于是向左滚动(正数),可以是负数
LIST.sort(SORT_BY)
#默认使用<cmp>,接受2个参数 LIST.unique(:COMPARE_AS, :COMPARE_WITH)
#使用===比较,返回保持顺序
#:as对比较的值作何处理再比 :with什么才算unique(标准)
LIST.repeated(:COMPARE_AS, :COMPARE_WITH)
#返回重复的值 LIST.squish(:COMPARE_AS)
#把相邻的一样的值去重,只保留一个,像tr///d

reduce

LIST.reduce(CODE)
#这个在Perl5中是Scalar::Util类中有
#mplicit loop, responds to next, last and redo statements.
my @ops = [Z] (<+ - * />, 1..20)».roll(4);
say ('x', |@ops).reduce: -> $formula, [$op, $number] {
Bool.pick ?? "($formula $op $number)"
!! "($number $op $formula)"
}
#[Z] zip the following list
#» or >> is the hyper method call operator,就是
#在每一个元素上call紧跟其后的方法,这个例子中
#就是分别在<+ - * />上call roll(4)选出4个,再在1..20上call roll(4)选出4个
#| flatten Pair List, Hash, Capture等

排列组合

LIST.combinations(INTEGER)
LIST.combinations(RANGE)
#上面的是组合,如果给出一个数字,例如3,返回
# 3个一组的所有组合;也可以给范围,则范围里的每种组合都返回
#还有一种形式
combinations INTEGER_A, INTEGER_B
(^INTEGER_A).combinations(INTEGER_B)
#是0到INTEGER_A的数的INTEGER_B组合
LIST.permutations
#上面是排列,没有参数

合并、分段

zip LIST_A LIST_B
#只有subroutine, 没有method
#或者
LIST_A Z LIST_B
#两种形式一样,都以LIST_A的长度为准
#如果要以较长的那个为准,可以用
roundrobin LISTS
#短的list没有就空着,返回的list的sublist可能是层次不齐的 LIST.rotor(EXPR, :partial?)
#把list分段切,每几个元素一组
#如果EXPR是一个正整数,例如3,就3个元素一组分
#如果:partial,最后不足的部分也包括进来
#如果EXPR是a=>b,a是分组的单位,b如果为正表示跳过几个,b为负表示重叠几个
#如果有a=>b,c=>d,...就会每次调用一个规则,不断重复
#这个方法太好了

继承自Iterable类

ITERABLE.flat
ITERABLE.lazy
ITERABLE.race(BATCH?, DEGREE?)
#和hyper一样,不过返回的不一定是原顺序
ITERABLE.hyper(BATCH?, DEGREE?)
#实现并行处理,返回的iterable,仔call的方法就可以并行了

Backup: Array in Perl6的更多相关文章

  1. Backup: Numbers in Perl6

    Perl6 is a new language, not a improved version of Perl5. Perl6 inherits many good features from man ...

  2. Linux 数组

    200 ? "200px" : this.width)!important;} --> :介绍 在shell4.0之后支持普通数组和关联数组,普通数组只能使用整数作为索引,关 ...

  3. 算法(第四版)C# 习题题解——2.1

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...

  4. Backup: Date and Time in Perl6

    时间 Date #Operators ==, <, <= , >, >=, !=, eq, lt, le # Methods $date = Date.new(YEAR, MO ...

  5. Backup: Flow Control in Perl6

    Control Flow 注意空格,注意空格,注意空格 和 Perl5不同的是,这些结构都可以返回值,而且即使倒置结构也可以用 block 了 block 可以有逗号 with without orw ...

  6. A Mysql backup script

    UseCentOS can help IT managers to get rid of the boring learning methods, quick grasp Linux technolo ...

  7. perl6 HTTP::UserAgent (2)

    http://www.cnblogs.com/perl6/p/6911166.html 之前这里有个小小例子, 这里只要是总结一下. HTTP::UserAgent包含了以下模块: --------- ...

  8. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  9. ES5对Array增强的9个API

    为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...

随机推荐

  1. css3背景色渐变

    <style> .test { width: 200px; height: 200px; background: -moz-linear-gradient(top, #8fa1ff, #3 ...

  2. 背景建模SACON

    http://www.cnblogs.com/dwdxdy/p/3530862.html

  3. 多台CentOS服务器时间同步(NTP时间同步)(转)

    1.用ntpdate从时间服务器更新时间 如果你的linux系统根本没有ntpdate这个命令 yum install ntp 安装完了之后,你不要做什么配置,也不需要,直接测试一下 [root@lo ...

  4. Android 利用ListView制作带竖线的多彩表格

    1.listview与GridView 其实Android本身是有表格控件(GridView)的,但是GridView的每一列的宽度被限定为一样宽,有时设计表格时,列宽不可能为同一宽度,所有可以用Li ...

  5. ucenter 客户端里的自动方法

    <?php /** * UCenter 应用程序开发 Example * * UCenter 简易应用程序,应用程序有自己的用户表 * 使用到的接口函数: * uc_authcode() 可选, ...

  6. 阿里云数据库实例的一个db被开发人员删除了 如何恢复

    1没有 逻辑备份的话. 如下操作即可 可以将那个临时实例的需要导的db用逻辑备份出来恢复到主实例就行了 好多朋友都在问,RDS中把数据恢复到7天内任意时间点的功能在哪里啊? 其实挺简单的,只需要五步操 ...

  7. LaunchImage命名与AppIcon命名(ios设置 启动图片和AppIcon图片)

    LaunchImage AppIcon 分别拖拉至Images.scassets  对应的LaunchImage和AppIcon就可以设置 启动图片和AppIcon图片

  8. 使用CollectionView做横向滑动分页效果:

    一开始几页滑动是没有问题的,等滑到三四个页面之后,就出现奇怪的缝隙,一开始死活找不到原因,最后在layout的代理方法minimumLineSpacingForSectionAtIndex返回值设置为 ...

  9. [Call Vibrator] How to Enable Outgoing Call Vibration without ROOT

    Call Vibrator requires the radio log of phone to detect when outgoing call is answered. But since An ...

  10. scp noneed passwd

    经常在不同linux机器之间互相scp拷文件,每次总是要输入密码才可行. 通过ssh-keygen生成公钥,在两台机器之间互相建立信任通道即可. 假设本地机器client,远程机器为server. 1 ...