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

J语言实现:筛选同时出现在表格两列中的数字

J语言实现方案

核心思路

先找出同时出现在表格两列中的数字集合,再从原表格的所有元素中筛选出属于这个集合的数字,最后排序得到目标结果。

分步实现

假设输入表格为 y =: 4 2 $ 1 2 3 4 2 1 1 2(对应你给出的示例数据):

  1. 展平表格为一维列表
    把二维表格转换成一维,方便后续筛选:

    ,y  NB. 输出:1 2 3 4 2 1 1 2
    
  2. 筛选符合条件的元素
    判断每个元素是否同时存在于第一列和第二列,保留满足条件的元素:

    (,y) #~ (e. {."1 y) * (e. {:"1 y)  NB. 输出:1 2 2 1 1 2
    
    • {."1 y:提取表格的第一列
    • {:"1 y:提取表格的第二列
    • e.:判断元素是否属于某一列
    • *:逻辑“与”,只有同时满足在两列中存在的元素才会被保留
  3. 排序得到最终结果
    对筛选后的列表排序,就是你需要的格式:

    /:~ (,y) #~ (e. {."1 y) * (e. {:"1 y)  NB. 输出:1 1 1 2 2 2
    

一行简化写法

把所有步骤合并成一行:

y =: 4 2 $ 1 2 3 4 2 1 1 2
/:~ (,y) #~ (e. {."1 y) * (e. {:"1 y)

关于Nub Sieve的应用

如果想用~.(Nub Sieve)先明确两列的交集元素,也可以这么写:

common =: ~. {."1 y e.~ ~. {:"1 y  NB. 得到两列的交集:1 2
/:~ (,y) #~ e. common

这里~. {."1 y取第一列的唯一元素,~. {:"1 y取第二列的唯一元素,e.~找出同时存在于两者中的元素,也就是交集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:11:11