シーケンスの最後の要素を反復処理するときに、特別な方法で処理する必要があることがよくあります。たとえば、組み込み関数を考えてみましょうinterpose
。
> (interpose ", " (range 4))
(0 ", " 1 ", " 2 ", " 3)
これについての考え方の1つは、次のとおりです。
- 最初の要素を取り、「、」を追加します
- 2番目の要素を取り、「、」を追加します
- 3番目の要素を取り、「、」を追加します
- ..。
- 最後から2番目の要素を取得し、「、」を追加します
- 最後の要素を取り、何もしません
また、シーソーを使用してミグレイアウトを構築するときは、何か特別なことをする必要があることもわかりました。たとえば、これを作成したいとします。
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
| 7 | 8 | 9 |
+---+---+---+
ここで、各数字はいくつかのコンポーネント(ボタンなど)です。これを行うには、パネル全体のMigレイアウト制約を「フロー」にしてから、各コンポーネントに次の制約を追加します。
- 「成長」-コンポーネント1、2、4、5、7、8、9
- 「成長、ラップ」-コンポーネント3、6
上記は次のように言うことができることに注意してください:
- 行の最後のコンポーネントを除く各コンポーネントの「成長」
- 最後の行の最後のコンポーネントを除く他のすべてのコンポーネントの「成長、折り返し」
ここでも同じ「特別な最後の要素」のテーマが表示されます。
したがって、2つの質問:
- 上記の推論は理にかなっていますか?つまり、上記のサンプルの問題と一般的なテーマを考慮して、設計を根本的に変更し、これを別の方法で考える必要がありますか?
- そうでない場合、これを行うための慣用的で短い方法はありますか?
はい、ヘルパー関数やマクロを作成することはできますが、これはよくあることなので、上記のいずれかである必要があると思いがちです。言い換えれば、同じタイプの「問題」に遭遇し、それらをどのように解決しますか?