2016-07-14 5 views
1

私は、特定の細胞だけがそこに存在し、それよりも大きくないことを保証する必要があります。これらのヘッダーセルのテキストもあらかじめ指定されています。アプリケーション内で異なるセルテキストも許可することはできません。Cの辞書に含まれています

その後、ヘッダーに基づいて、データをリストに入れなければなりません。私は辞書で私のExcelを変換するためにやっている何を

はこれです:

var ws = excel.Workbook.Worksheets["Sheet1"]; 

int headerCol = 2; 

Dictionary<string, int> map = Enumerable 
    .Range(ws.Dimension.Start.Column, 24 - ws.Dimension.Start.Column + 1) 
    .ToDictionary(col => ws.Cells[headerCol, col].Value.ToString().Trim(), col => col); 

for (int rw = 3; rw <= ws.Dimension.End.Row; rw++) 
{ 
    if (!ws.Cells[rw, 1, rw, 24].All(c => c.Value == null)) 
    { 
     lgl.GroupMembershipUploadInputList.Add(new GroupMembershipUploadInput() 
     { 
      cnst_mstr_id = (ws.Cells[rw, map["Master Id"]].Value ?? (Object)"").ToString(), 
      cnst_prefix_nm = (ws.Cells[rw, map["Prefix"]].Value ?? (Object)"").ToString(), 

しかし、今どのように私は、ディクショナリマップのみが、例えば、これらの非常に指定された文字列のキーとないものと異なるものが含まれていることを確認しますマスターIDとプレフィックス - これらの2つと、まさにこの2つだけです。

実際には24個のキーがあります。チェックするための略語コードはありますか?

+0

'map.Keys.All(k => new [] {"マスターID "、"接頭辞 "}。コンテナ(k));'? – itsme86

答えて

3

Dictionaryクラスは、辞書内のキーのexistanceを確認するために使用することができますContainsKey()というメソッドが含まれています

if(map.ContainsKey(key)) 
{ 
     // Do something 
} 

あなたが複数のキーの存在を確認するために必要な場合は、格納することができあなたがコレクション内をチェックし、それを評価するためにLINQのビットを使用するために必要なキー:

// Keys to check for 
var keys = new []{ "Master_Id", "Prefix" }; 
// Check if all of these keys exist 
if(map.Keys.All(k => keys.Contains(k)) && map.Keys.Count() == keys.Count()) 
{ 
     // All of the keys are present in your collection 
} 

代わりに、あなただけのIntersect()方法を経由して、キーの交点をチェックして、彼らは一致することを確認できましたよく:

if(map.Keys.Intersect(keys).Count() == keys.Count()) 
{ 
     // Exactly every key is present 
} 
+0

LINQクエリは、すべてのキーがマップに含まれていることを確認しますが、OPはそのキーのみがマップに含まれていることを確認します。 – itsme86

+0

それを指摘してくれてありがとう。それは何よりもタイプミスでしたが、劇的に違いを生み出しました。 –

+1

条件(map.Keys.Count()== keys.Count())を追加してみませんか?あなたのコードと一緒にmap.Keysに余分なキーがないことを確認します。 –

1

基本的に2つのキーセットを等しくしたいので、2つのチェックが互いに含まれている必要があります。

string[] keys = new[] { "Master Id", "Prefix" }; 
Dictionary<string, int> map = new Dictionary<string, int>(); 

bool check = keys.All(map.ContainsKey) && map.Keys.All(keys.Contains); 
関連する問題