作者:oFoUro_877 | 来源:互联网 | 2022-12-08 17:44
我正在进行排序,并希望控制alpha值的cmp不区分大小写(即https://perl6.org/archive/rfc/143.html).
是否有一些:我也许是这个副词?
1> daotoad..:
如果你想要一个"字典"排序顺序,@ timotimo在他们建议collate
和coll
排序时就在正确的轨道上.
使用collate()
任何listy进行排序.coll
如果需要自定义排序,请用作中缀运算符.
$ perl6
To exit tyype 'exit' or '^D'
> .collate();
(09 9 90 91 a ab zo Zp zz)
> .sort: * coll *;
(09 9 90 91 a ab zo Zp zz)
2> Brad Gilbert..:
Perl 6目前没有这个选项,但它是一种非常可变的语言,所以让我们添加它.
由于现有的proto
不允许命名值,我们必须添加一个新的,或写一个only
sub.
(那就是你可以使用multi
下面的内容,除了可选的only
.)
这仅适用于词法,因此如果您这样写,您可能希望将proto
/ only
sub 标记为可导出,具体取决于您正在执行的操作.
proto sub infix: ( \a, \b, *% ){*}
multi sub infix: ( \a, \b, :ignore-case(:$i) ){
$i
?? &CORE::infix:( fc(a) , fc(b) )
!! &CORE::infix:( a , b )
}
say 'a' leg 'A'; # More
say 'a' leg 'A' :i; # Same
say 'a' leg 'A' :!i; # More
say 'a' leg 'A' :ignore-case; # Same
请注意,这:$i
是:i( $i )
两个命名参数可以写为:
:ignore-case( :i( $i ) )
我还使用了子形式fc()
而不是方法形式,.fc
因为它允许使用本机形式的字符串而不会导致自动装箱.
3> Coke..:
您可以传递代码块进行排序.如果块的arity是1,则在进行比较时它对两个元素都有效.这是一个显示前一个答案的'fc'的例子.
> my @a = ;
[alpha BETA gamma DELTA]
> @a.sort
(BETA DELTA alpha gamma)
> @a.sort(*.fc)
(alpha BETA DELTA gamma)
4> Håkon Hæglan..:
从文档中
为了进行不区分大小写的比较,您可以使用.fc
(fold-case).问题是人们倾向于使用.lc
或者.uc
它似乎在ASCII范围内工作,但在其他角色上失败.这不仅仅是一个Perl 6陷阱,同样适用于其他语言.
例如:
say ‘groß’.fc eq ‘GROSS’.fc; # ? RIGHT; True
如果您正在使用正则表达式,则无需使用.fc
,您可以使用:i
(:ignorecase
)副词.