カスタムデータ型(構造)と配列
-
28-10-2019 - |
質問
選択すると、3つのテキストボックスにテキストを表示するコンボボックスがあります。
コンボボックスアイテムは50州であり、テキストボックスには州の法令に関する情報が表示されます。現在、私は各状態のデータを保持するために多次元配列を使用しています(配列内の各アイテムは、状態、アイテム1、アイテム2、アイテム3を保持しています)。
私の質問は、3つのアイテムを保持する状態データ型を作成する方が良いか、よりコンパクトであるでしょうか、そして実際にこれが効果的なアプローチでさえある場合はどうでしょうか?私はアレイが好きではありません、それは私が今やる方法を知っているすべてです。
ほとんどの場合、3つのデータ型が繰り返し使用されます。
たとえば、そのうちの1つは州が使用するタイムゾーンであるため、可能なオプションは6つしかありません。
私は自分の前にコードを持っていないか、それを投稿すること、私が考えていたものだけです。
解決
多次元配列について自問しなければならない質問は、「別のプログラマーを見て、何が起こっているのかを理解できますか?」
もっとコンパクトですか?多分メイビーはそうではありません。それはすべてコードに依存します。実際には、メモリの要件が非常に低い場合を除き、おそらく問題ではありません。このように考えてみてください。たとえば、各TimeZoneが4バイト(整数のサイズ)を占めるとしましょう。各タイムゾーンのエントリがあるということは、50 x 4 = 200バイトを使用したことを意味します。どちらの方法で心配するのに十分ではありません。
6か月後には、おそらくそれが何をするかを理解するのが困難になるからです。読みやすさと保守性は、ほとんどすべての状況で王様です。
たぶん例は次のとおりです。
class State
{
public State (string stateId, int timeZoneOffset)
{
StateId = stateId;
TimeZoneOffSet = timeZoneOffset;
}
public String StateId {get;set;}
public int TimeZoneOffest {get;set;}
}
public class StatesAndTerritories
{
List<State> _states = new List<State>
public StatesAndTerritories ()
{
//_state.Add state information here
_state.Add(new State("AZ", -6); ......
}
public IEnumerable<State> GetStates (){
return _state;
}
public IEnumerable<State> GetStatesInZimeZone(int timezone)
{}
etc..
}
他のヒント
カスタムタイプに移動して、クリーナー(名前でプロパティにアクセスできます)、エラーが発生しやすく(インデックスよりも名前を混乱させるのが難しい)、保守可能(プロパティは「ソート」されていません。 length
それはプロパティカウントに適合する必要があり、さまざまなタイプのプロパティが必要な場合は、タイプの安全性があります)。
ソースコードは、あなたが何をしているのかを正確に理解するのに役立ちます。
純粋なパフォーマンスが目標である場合、各状態の情報を保持している構造体を持つ単一のディメンションアレイを提案します。
これにより、要素へのアクセスがスピードアップされ、どの変数がどの値(配列インデックスの代わりに変数と呼ばれる変数)があるかを簡単に追跡できます。構造体は値タイプであることを覚えておくことが重要です。したがって、それを別の関数に渡すと、関数はオリジナルではなく構造体のコピーを取得します。これは、配列を直接操作する場合は問題ではありませんが、リストを使用する場合、または選択した状態情報を別の方法に渡す必要がある場合は問題になります。