の組み合わせのような文字列を生成するCheckboxBarを使用すると、こののMathematica:私は何か本当に長いと迷惑で始まっフレーズ
Manipulate[
thetext = Switch[Total[obj],
0, Text["", {0, 5}],
1, Text["How", {0, 5}],
2, Text["Does One", {0, 5}],
4, Text["Use CheckboxBar", {0, 5}],
8, Text["=A=", {0, 5}],
3, Text["How Does One", {0, 5}],
5, Text["How Use CheckboxBar", {0, 5}],
9, Text["How =A=", {0, 5}],
6, Text["Does One Use CheckboxBar", {0, 5}],
10, Text["Does One =A=", {0, 5}],
12, Text["Use CheckboxBar =A=", {0, 5}],
7, Text["How Does One Use CheckboxBar", {0, 5}],
11, Text["How Does One =A=", {0, 5}],
13, Text["How Use CheckboxBar =A=", {0, 5}],
14, Text["Does One Use CheckboxBar =A=", {0, 5}],
15, Text["How Does One Use CheckboxBar =A=", {0, 5}]];
Graphics[thetext],
{{obj, {1, 2, 4, 8}, "Text"}, {1 -> "How", 2 -> "Does One",
4 -> "Use CheckBoxBar", 8 -> "=A="}, CheckboxBar}]
のように書くしかし、私はすぐに私はおそらく1,2,4を置き換えることができることを実現するために、4つの2進数、すなわち0000 = 0、1101 = 11などで8。だから私はこの関数を書いています。
g[{d_, f_, g_, h_}] :=
StringJoin[
If[d == 1, "d", ""], If[f == 1, "f", ""], If[g == 1, "g", ""], If[h == 1, "h", ""]];
これはうまくいきます。ただし、CheckboxBarはチェックされた項目のみを含むリストを生成します。それに加えて、チェックされたエントリの順序は、最初にチェックするものに基づいて変更されます。
質問:私は、現在のものよりはるかに短く、より簡潔な関数を作ります。私の割り当ての要件であったので、チェックボックスを使用してください。チェックボックスなしでは、私の割り当てがどのくらい簡潔であるかを評価していないので、大丈夫です。私は改善のために改善したいだけです。
thetext = Text [Switch [Total [obj]、0、 "、1、" How One "、 4、 "Use CheckboxBar"、8、...]、{0、5}]は、Text [、{0,5}]の多くのコピーをファクタリングすることによって、より短く簡潔です。重要な理由がない限り、スイッチの選択肢を数値順にソートすると、いくつかのエラーが目立ちやすくなることがあります。これは、Text [{""、 "How"、 "Does One"、 "How Does One"、...} [[Total [obj]]、{0、5}]を使用させるかもしれません。あなたの関数gについては、MapThreadのドキュメントを調べて、それを使ってあなたが現在持っている重複を除外する方法を想像できるかどうかを見てみましょう。 – Bill