You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Raku中对列表元素分组?是否支持类似groupBy的getter分组方法?

Raku 中的分组功能(对应 Scala/Lodash 的 groupBy)

Raku 原生提供了classify方法,完全实现了你需要的分组功能——传入一个用于提取分组键的逻辑(对应你说的 getter),将列表中该逻辑返回相同值的元素归为一组,效果和 Scala、Lodash 的groupBy完全一致。

基础示例(对应你给出的例子)

用 Raku 实现按模3分组:

(1..9).classify(* % 3)

返回结果:

Map(0 => (3, 6, 9), 1 => (1, 4, 7), 2 => (2, 5, 8))

补充说明

  • classify接收一个代码块作为参数,这个代码块就是你的分组依据逻辑,它会被应用到列表的每个元素上,返回值作为分组的键
  • 返回的是Map类型,键是分组键的值,值是对应分组的元素列表,且元素保持原列表中的顺序

另外,Raku 还提供了group-by方法,它是classify的别名,用法完全相同:

(1..9).group-by(* % 3)

复杂场景示例(按对象属性分组)

如果要对自定义对象按属性分组,同样简单:

class Person {
    has $.name;
    has $.age-group;
}

my @people =
    Person.new(name => 'Alice', age-group => 'young'),
    Person.new(name => 'Bob', age-group => 'adult'),
    Person.new(name => 'Charlie', age-group => 'young');

@people.classify(*.age-group)

返回结果:

Map(young => (Person<Alice>, Person<Charlie>), adult => (Person<Bob>))

内容的提问来源于stack exchange,提问作者menfon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:20:20