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

如何在Ballerina中求两个数组的交集并创建allrounders数组?

在Ballerina中计算两个Player数组交集的最优方法

要找出同时属于batsmen和bowlers的球员(也就是allrounders),可以根据数组规模选择以下两种最优实现方式:

方法1:filter + exists(适合小规模数组)

这种方式代码简洁直观,直接遍历batsmen数组,检查每个球员的id是否存在于bowlers数组中:

public type Player record {
    int id;
    string name;
};

Player[] batsmen = [
    {id: 1, name: "Virat"},
    {id: 2, name: "Rohit"},
    {id: 3, name: "Jadeja"}
];

Player[] bowlers = [
    {id: 3, name: "Jadeja"},
    {id: 4, name: "Bumrah"},
    {id: 5, name: "Shami"}
];

Player[] allrounders = batsmen.filter(b => bowlers.exists(bo => bo.id == b.id));

方法2:哈希集合优化(适合大规模数组)

如果数组元素较多,用哈希集合存储bowlers的id可以将查找时间从O(n)降到O(1),整体性能从O(n*m)提升到O(n+m):

public type Player record {
    int id;
    string name;
};

Player[] batsmen = [
    {id: 1, name: "Virat"},
    {id: 2, name: "Rohit"},
    {id: 3, name: "Jadeja"}
];

Player[] bowlers = [
    {id: 3, name: "Jadeja"},
    {id: 4, name: "Bumrah"},
    {id: 5, name: "Shami"}
];

// 先提取bowlers的id存入哈希集合
hashset<int> bowlerIdSet = new(bowlers.map(bo => bo.id));
// 筛选出id在集合中的batsmen
Player[] allrounders = batsmen.filter(b => bowlerIdSet.has(b.id));

注意事项

优先用id作为判断依据,而非直接比较整个Player record:

  • id是唯一标识,避免因名字重复导致的错误匹配
  • 对比单个int字段比对比整个record的所有字段更高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:33:21