リスト?辞書?アレイ?
-
22-07-2019 - |
質問
私は、タブコントロールの各タブページのブール値を保存する非常に簡単な方法を考えています。各ページにはテキストボックスがあり、beach foreachページを保存したいので、タブページ1が保存されている場合、bool1はtrueに設定され、そうでない場合はfalseなどになります。
その後、プログラムを閉じようとすると、すべてのタブページが調べられ、各タブページが保存されているかどうかが確認されます。検索と操作が可能なリストを作成する必要があります。
iは以前このためにタグプロパティを使用していましたが、何らかの理由でこれは正しく機能しません。
ヘルプアドバイスは素晴らしいと思います; y感謝:)
ありがとうございます
バエル。
解決
配列、リスト、辞書のいずれも、一連のオブジェクトのブール状態を追跡するための適切なデータ構造ではありません。これを行う構造はHashSet<T>
です。セットにT
が含まれているか、含まれていないかのいずれかです。
Dictionary<T, bool>
よりも優れているのは、オブジェクトがディクショナリにあるかどうか、および値がtrueまたはfalseであるかどうか、実際に two 状態を維持するためです。
List<T>
よりも優れている理由は2つあります。高速である(ただし、ほぼ間違いなく無視できる)が、含まれているオブジェクトの順序に意味があることを意味するものではない<=>内のオブジェクトの順序は任意です。
他のヒント
List<TabPage>
保存する必要があるタブページのみを保存します。空の場合、何も保存する必要はありません。
たとえば、Dictionary<TabPage,bool>
を使用できます。アプリケーションの開始時:
var pageStates=new Dictionary<TabPage,bool>();
foreach(var page in tabControl.TabPages) {
pageStates.Add(page, false);
}
TabPageの状態を変更するには:
pageStates[page]=true;
そして、アプリケーションが終了したら:
foreach(var page in TabControl.TabPages) {
if(pageStates[page]) {
//The page is saved
}
}
要素を削除または追加せずに繰り返し処理する場合は、配列を使用します。
繰り返しながら、要素を追加および削除する場合は、リストを使用します。
文字列をキーとして使用している場合は、辞書を使用します。
ディクショナリは、リストに比べて非常に高速な検索パフォーマンスを持ち、要素数が多くなっています。