2016-11-08 5 views
-1

データベースからリストのデータを取得していて、その列の2つをハッシュテーブルに格納したいとします。しかし、インデックスが0のハッシュテーブルには1行しか挿入できません。インデックスを考慮せずにハッシュテーブルに挿入する方法はありますか?私は今、以下のアプローチを使用しています。助言がありますか?インデックス値にかかわらずHashtableに値を追加

foreach (StoreInfo store_info_id in StoreList) 
      { 

       Hashtable hashTable = new Hash table(); 
       hashTable.Add(StoreList[0].store_info_id, StoreList[0].RetailControlNumber); 
      } 
+2

あなたが今まで 'HashTable'を使用すべきではありません。あなたは 'Dictionary'を使うべきです。 – Servy

+0

@Servy私は、このテーブルの多くのエントリが毎回3-4になることを期待していないので、ハッシュテーブルは私が思った良いオプションでした。しかし、私は辞書を使ってこれを行うことで提案をすることができます。 – Programmermid

+0

あなたのforeachは完全にオフです。イテレーター値store_info_idは使用されません。 –

答えて

2

3点:

  1. Hashtable型引数を持つことが可能であった前に、ちょうどDictionary<object, object>です。したがって、Hashtableが唯一のオプションだったときに書かれたレガシーコードとのインターフェースを行っている場合を除いて、今日はHashtableを使用する正当な理由はもうありません。

  2. あなたは辞書内の同じエントリに列を入れたい場合は、それを行うための適切な方法は、辞書内のレコードを表現するタイプを作成することです。そして、

    public class StoreRecord 
    { 
        public int StoreInfoID; 
        public string Column1; 
        public string Column2; 
    } 
    

    、使用Dictionary<int, StoreRecord>

    var records = new Dictionary<int, StoreRecord>(); 
    
    foreach (var storeDatabaseRow in storeList) 
    { 
        var record = new StoreRecord(); 
    
        record.StoreInfoID = storeDatabaseRow.store_info_id; 
        record.Column1 = storeDatabaseRow.Column1; 
        record.Column2 = storeDatabaseRow.Column2; 
    
        records[record.StoreInfoID] = record; 
    } 
    
  3. データベースのレコードは、軽量で切断されている場合は、その理由だけで辞書からデータベース全体のレコードを参照しませんか?

    var records = new Dictionary<int, StoreInfo>(); 
    
    foreach (var storeDatabaseRow in storeList) 
        records[storeDatabaseRow.store_info_id] = storeDatabaseRow; 
    

    または、LINQを使用して:

    var records = storeList.ToDictionary(keySelector: row => row.store_info_id); 
    
関連する問題