删除所有包含一个元素的框
remove all boxes with one element
如何删除所有包含一个元素的框?例如。我想转这个:
┌─────┬───┬─┬─────┐
│1 1 1│2 2│3│2 2 2│
└─────┴───┴─┴─────┘
进入这个:
┌─────┬───┬─────┐
│1 1 1│2 2│2 2 2│
└─────┴───┴─────┘
假设您的值在 a
:
]a =. 1 1 1; 2 2; 3; 2 2 2
┌─────┬───┬─┬─────┐
│1 1 1│2 2│3│2 2 2│
└─────┴───┴─┴─────┘
这里的技巧是获取每个盒子的长度:
#@> a
3 2 1 3
如果长度 > 1,你得到一个 "mask" 你可以传递给 copy。
1 < #@> a
1 1 0 1
a #~ 1 < #@> a
┌─────┬───┬─────┐
│1 1 1│2 2│2 2 2│
└─────┴───┴─────┘
13:
会告诉我们如何使这个默认:
13 : 'y #~ 1<#@>y'
] #~ 1 < #@>
碰巧,需要把id
放在fork的最后一个位置,这正是hook所做的,所以我们甚至可以再简化一步:
remsingles =. #~ 1 < #@>
remsingles a
┌─────┬───┬─────┐
│1 1 1│2 2│2 2 2│
└─────┴───┴─────┘
@Daniel 回答的另一种观点。
过滤列表很常见,常用的成语是:
(#~ filter)
其中 filter
是一个动词,返回 1
表示要保留的元素,返回 0
表示要丢弃的元素。在这种情况下,您的过滤器是
(1 < size) for_each_element
将size
翻译成#
,将for_each_element
翻译成动词"every"
(&>
),过滤器是
(1 < #) &>
所以,
remsingles =: #~ (1 < #) &>
remsingles a
┌─────┬───┬─────┐
│1 1 1│2 2│2 2 2│
└─────┴───┴─────┘
如何删除所有包含一个元素的框?例如。我想转这个:
┌─────┬───┬─┬─────┐
│1 1 1│2 2│3│2 2 2│
└─────┴───┴─┴─────┘
进入这个:
┌─────┬───┬─────┐
│1 1 1│2 2│2 2 2│
└─────┴───┴─────┘
假设您的值在 a
:
]a =. 1 1 1; 2 2; 3; 2 2 2
┌─────┬───┬─┬─────┐
│1 1 1│2 2│3│2 2 2│
└─────┴───┴─┴─────┘
这里的技巧是获取每个盒子的长度:
#@> a
3 2 1 3
如果长度 > 1,你得到一个 "mask" 你可以传递给 copy。
1 < #@> a
1 1 0 1
a #~ 1 < #@> a
┌─────┬───┬─────┐
│1 1 1│2 2│2 2 2│
└─────┴───┴─────┘
13:
会告诉我们如何使这个默认:
13 : 'y #~ 1<#@>y'
] #~ 1 < #@>
碰巧,需要把id
放在fork的最后一个位置,这正是hook所做的,所以我们甚至可以再简化一步:
remsingles =. #~ 1 < #@>
remsingles a
┌─────┬───┬─────┐
│1 1 1│2 2│2 2 2│
└─────┴───┴─────┘
@Daniel 回答的另一种观点。
过滤列表很常见,常用的成语是:
(#~ filter)
其中 filter
是一个动词,返回 1
表示要保留的元素,返回 0
表示要丢弃的元素。在这种情况下,您的过滤器是
(1 < size) for_each_element
将size
翻译成#
,将for_each_element
翻译成动词"every"
(&>
),过滤器是
(1 < #) &>
所以,
remsingles =: #~ (1 < #) &>
remsingles a
┌─────┬───┬─────┐
│1 1 1│2 2│2 2 2│
└─────┴───┴─────┘