2017-12-01 10 views
3

1つの要素ですべてのボックスを削除するにはどうすればよいですか?例えば。この中に、1つの要素ですべてのボックスを削除する

┌─────┬───┬─┬─────┐ 
│1 1 1│2 2│3│2 2 2│ 
└─────┴───┴─┴─────┘ 

:私はこれをオンにしたいと思います

┌─────┬───┬─────┐ 
│1 1 1│2 2│2 2 2│ 
└─────┴───┴─────┘ 

答えて

4

は、あなたの価値が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 

e length> 1の場合、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を置くために必要とするフックがまったく同じものですので、私たちも、することができますもう1つステップを簡略化してください。

remsingles =. #~ 1 < #@> 
    remsingles a 
┌─────┬───┬─────┐ 
│1 1 1│2 2│2 2 2│ 
└─────┴───┴─────┘ 
+0

グレート答えは動詞"every"&>)として#としてsizefor_each_elementを翻訳

(1 < size) for_each_element 

です。 「13:これを暗黙のうちにする方法を教えてくれるでしょうか?」とはどういう意味ですか? – Fuser97381

+1

@ Fuser97381これは[explicit](http://www.jsoftware.com/help/dictionary/d310n.htm)ビルトインで、13とコードの文字列で呼び出すと明示的な関数を書き直そうとします変数 'x'と' y')を仮引数なしの暗黙の関数に変換します。それは暗黙のことについて学ぶための非常に有用なツールです! –

+0

それは本当に面白いです。私はこの文書が、同じことを考えている人のために見つけました:http://jsoftware.com/help/jforc/explicit-to-tacit_converter.htm – Fuser97381

4

@ダニエルの答えの別の見方。リストをフィルタリング

は非常に一般的であり、通常のイディオムは次のとおりです。

filterを廃棄するものを保持して 0される要素のための 1を返す動詞である
(#~ filter) 

。この場合、あなたのフィルターは、フィルターが

(1 < #) &> 

ので、

remsingles =: #~ (1 < #) &> 
remsingles a 
┌─────┬───┬─────┐ 
│1 1 1│2 2│2 2 2│ 
└─────┴───┴─────┘ 
関連する問題