0

以下に示すようなバックエンド テーブルがあり、ado.net を使用してそれを読んでいます。

code 1これをキーと値のペアで辞書に変換しようとしましたが、キーと値をマッピングして、読んだときにそのカテゴリ名を返すことができcode 3、サブコードとして 2 を読んだときにその両方を読むことができるようにする方法がわかりません対応するカテゴリとサブカテゴリは?(たとえば、Old、ThreeMonth など)。

この機能を実現するために利用できる他のタイプ/クラスはありますか?

code    Sub_Code    Category    Sub_Category
1             1     NEW                  NEW
2             1         Old             OneMonth
2             2         Old                 TwoMonth
2             3         Old                 ThreeMonth
2             4         Old                 Ninemonth
5             4     APPOINTMENT         APPOINTMENT MADE
9             4         Invalid             LANGUAGE BARRIER
4

2 に答える 2

2

データに対して実行する必要がある操作、データが変更される頻度などに応じて、いくつかのオプションがあります。いくつかの明白なものは次のとおりです。

ネストされた型

カテゴリとそのサブカテゴリを保持するカスタム タイプを作成します。これには、サブカテゴリがない場合はスキップできるという利点があり、データ型をビジネス オブジェクトに正確にマッピングできます。

public class Category 
{
  public int Id;
  public string Name;
  Dictionary<int, string> Subcategories = new Dictionary<int, string>();
}

Dictionary<int, Category> Categories;

( aから aをキーとして直接KeyedCollection抽出できるa here も検討します。)IdCategory

欠点: 2 つの検索を行う必要があるため、サブカテゴリを追加または取得するのに少し手間がかかります。

var subcategory = Categories[1].Subcategories[1];

4 タプル (クアッドプル?)

データ構造がほとんど変更されない場合は、4 フィールドを使用できますTuple<>

List<Tuple<int, int, string, string>> Categories;
var subcategory = Categories.Where(x => Item1 == 1 && Item2 == 1);

ここでの最大の欠点は、インデックスがうまく作成されていないことです。Tuples2 つ(1 つのキー、1 つの値)を使用することで、さらに複雑になりますが、これを少し軽減できます。

Dictionary<Tuple<int, int>, Tuple<string, string>> Categories;

しかし、IMO はちょっと面倒なので、その時点でカスタム クラスを使用します。

コレクションの分割

カテゴリ名とサブカテゴリを別々のコレクションに分割します。1 つはカテゴリ ID -> 名前のマッピングを保持し、もう 1 つはカテゴリ ID -> サブカテゴリのマッピングを保持します。

Dictionary<id, string> CategoryNames;
Dictionary<id, Dictionary<id, string>> Subcatgories;

これはソリューションよりも柔軟性がありTupleますが、カスタム データ型を使用しないため、より「迅速かつダーティ」なソリューションです。また、どちらか一方しか気にしないことが多い場合は、データを分離することで作業が効率化される可能性があります。

于 2012-06-11T15:05:20.533 に答える
0

ディクショナリは、メインディクショナリの値としても使用できます。したがって、dict[category][sub]を使用してデータにアクセスします

もう1つのオプションは、メインキーとセカンダリキーの両方を単一の一意キーに「コード化」するキーとしてタプルを使用することです。

于 2012-06-11T14:58:14.187 に答える