J语言实现:筛选同时出现在表格两列中的数字
J语言实现方案
核心思路
先找出同时出现在表格两列中的数字集合,再从原表格的所有元素中筛选出属于这个集合的数字,最后排序得到目标结果。
分步实现
假设输入表格为 y =: 4 2 $ 1 2 3 4 2 1 1 2(对应你给出的示例数据):
展平表格为一维列表
把二维表格转换成一维,方便后续筛选:,y NB. 输出:1 2 3 4 2 1 1 2筛选符合条件的元素
判断每个元素是否同时存在于第一列和第二列,保留满足条件的元素:(,y) #~ (e. {."1 y) * (e. {:"1 y) NB. 输出:1 2 2 1 1 2{."1 y:提取表格的第一列{:"1 y:提取表格的第二列e.:判断元素是否属于某一列*:逻辑“与”,只有同时满足在两列中存在的元素才会被保留
排序得到最终结果
对筛选后的列表排序,就是你需要的格式:/:~ (,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
相关产品推荐
相关产品推荐

