Perl で X11 ウィンドウを動的にタイル表示するスクリプトを作成しています。これまでのところ、ウィンドウの座標、サイズ、および ID を含む配列の配列を使用して、セッション中にタイル ウィンドウの状態を保存します。それは良い考えですか、それともこの情報を他の方法で整理する必要がありますか?
4 に答える
適切な構造は、データ構造にアクセスして処理する方法によって異なります。正しい構造を選択することは、プログラムを解く上で大きな部分を占めます。間違った構造を選択すると、単純な問題が難しくなる可能性があります。構造は非常に重要であるため、既存の構造を、実行する必要がある種類の作業により適した形式に変換する必要がある場合があります。
構造要素の選択に役立つ 2 つの基本的なルールを次に示します。
- 順序を保ちたい場合は、配列を使用します。
- 特定の名前、ID、またはその他の情報を多数検索する必要がある場合は、ハッシュを使用します。
したがって、ウィンドウを数えたいだけの場合は、ウィンドウの数よりも大きい画面に似た縦横比の長方形の数を見つけてから、ウィンドウを一度に 1 つずつ並べて表示します。配列を使用するだけです。
アプリケーション名によるウィンドウのルックアップや、さまざまなルックアップが必要なその他のことを行う場合は、ハッシュを使用します。
順序を維持するだけでなく、複数のキーに対して多くのルックアップを行う必要がある場合は、同じ基になる参照を指す複数のデータ構造を作成できます。
my @foo = (
{ name => 'a', id => '321' },
{ name => 'b', id => '123' },
);
my %foo_by_name = map { $_{name} => $_ } @foo;
my %foo_by_id = map { $_{id } => $_ } @foo;
複雑なコレクションを操作する (要素の追加と削除) 必要がある場合は、基礎となるすべての構造が一貫して管理されるように、さまざまな構造をオブジェクトにラップすることを検討してください。
配列の配列、または配列またはハッシュ、またはハッシュのハッシュ、または配列のハッシュの配列のハッシュは、perlで素晴らしいものであり、perlでのデータ処理が非常に簡単である理由の1つです。あなたはそれらを恐れる必要はありません!
さて、Perl における複合構造の標準表現は (祝福された) ハッシュです。重大なパフォーマンス上の懸念がない限り、データをハッシュにグループ化することをお勧めします。
OTOH、配列は均一なデータに適しています。しかし、一意の ID を持つデータがある場合 (X ウィンドウ ウィンドウには ID がありますよね?)、ハッシュはより自然な構造です。だからあなたはただ言う
do_something($windows->{$id}->{x});
ではない
foreach (@$windows) {
if ($_->{id} == $id ) {
do_something($_->{x});
};
}
私が従うガイドラインは次のとおりです。要素の順序を維持することが重要な場合は、配列を使用してください。それ以外の場合は、ハッシュを使用します。
ハッシュは配列よりも遅くなりますが、意味のあるキーを選択することで維持しやすくなります。だから私は配列よりもそれらを好みます。