在 Supply 中§
有关方法 squish,请参阅上下文中的主要文档
method squish(Supply: :, : --> Supply)
创建一个仅提供唯一值的供应,由可选的 :as
和 :with
参数定义(与 squish
相同)。
在 Any 中§
有关方法 squish,请参阅上下文中的主要文档
multi method squish( :!, : = &[===] )multi method squish( : = &[===] )
类似于 .repeated
,返回相等元素的连续序列的第一个元素的序列,如果存在,则按函数 :as
规范化,并使用相等运算符 :with
参数或默认情况下使用 ===
。
"aabbccddaa".comb.squish.say; # OUTPUT: «(a b c d a)»"aABbccdDaa".comb.squish( :as() ).say; # OUTPUT: «(a B c d a)»(3+2i,3+3i,4+0i).squish( as => *.re, with => &[==]).put; # OUTPUT: «3+2i 4+0i»
如最后一个示例所示,序列可以包含一个元素。有关其他 sub
示例,请参阅 squish
。
在独立例程中§
有关例程 squish,请参阅上下文中的主要文档
sub squish( +values, |c)
从调用方/参数列表中返回一个值序列,其中一个或多个值的运行仅替换为第一个实例。与 unique
一样,squish
使用 === 运算符的语义来决定两个对象是否相同。与 unique
不同,此函数仅删除相邻的重复项;间隔较远的相同值仍保留。即使删除了重复项,也会保留原始列表的顺序。
示例
say <a a b b b c c>.squish; # OUTPUT: «(a b c)»say <a b b c c b a>.squish; # OUTPUT: «(a b c b a)»
可选的 :as
参数与 unique
一样,允许在比较之前临时转换值。
可选的 :with
参数用于设置适当的比较运算符
say [42, "42"].squish; # OUTPUT: «(42 42)»# Note that the second item in the result is still Strsay [42, "42"].squish(with => :<eq>); # OUTPUT: «(42)»# The resulting item is Int