2017-05-24 84 views
1

我需要存儲2個密鑰(truefalse)及其相應的值(12)。更好的收集或更好的方法來搜索字典

Dictionary<bool, int> X = new Dictionary<bool, int>(); 
X.Add(true, 1); 
X.Add(false, 2); 

作爲只有2個關鍵值對還有其他更好的收藏嗎?

那麼對於外在價值的一個布爾型true或false,我需要尋找價值爲關鍵

int x = GetIntFromDictionary(X, true); 

private static int GetIntFromDictionary(Dictionary<bool, int> dict, bool val) 
{ 
    int v = 0; 
    if (dict.ContainsKey(val)) 
    { 
     v = dict[val]; 
    } 

    return v; 
} 

什麼是查找詞典或其他集合中的價值的最好方式,如果合適?

+4

會'val? 1:2'不夠? – Sayse

+0

如果您只有兩個選項,爲什麼要將它存儲在* any *集合中? – Guy

+0

無論出於何種原因,只需將true轉換爲1並將false轉換爲2,那麼@Sayse建議就足夠了。 – Gerben

回答

0

bool類型的鍵的唯一可能性是truefalse;這就是爲什麼沒有必要在ContainsKey,TryGetValue ...

Dictionary<bool, int> X = new Dictionary<bool, int>() { 
     {true, 5}, 
     {false, -15}, 
    }; 

    Dictionary<bool, int> OtherX = new Dictionary<bool, int>() { 
     {true, 123}, 
     {false, 456}, 
    }; 


    ... 

    private static int GetIntFromDictionary(Dictionary<bool, int> dict, bool val) { 
     return dict[val]; 
    }  

    ... 

    int result1 = GetIntFromDictionary(X, true); 
    int result2 = GetIntFromDictionary(X, false); 
    int result3 = GetIntFromDictionary(OtherX, true); 
    int result4 = GetIntFromDictionary(OtherX, false); 
2

由於val不能爲空,而你的國家,你的「字典」永遠只包含2把鑰匙,你不需要任何集合,只需設置一個三元或if語句

private static int GetValue(bool val) 
{ 
    return val ? 1 : 2; 
} 
+0

很好,但1和2不固定。 1和2也變成3,4。 – user584018

+0

我需要存儲在集合中作爲值1,2來自外部來源 – user584018

+1

@ user584018 - 然後,您應該更新您的問題以完全解釋問題 – Sayse

1

您可以使用TryGetValue

private static int GetValue(Dictionary<bool, int> dict, bool val) 
{ 
    int value; 
    dict.TryGetValue(val, out value); 

    return value; 
} 

如果存在將返回相關的值,否則返回0

如果0被合法值中使用的方法bool返回值

private static int GetValue(Dictionary<bool, int> dict, bool val) 
{ 
    int value; 
    if (dict.TryGetValue(val, out value)) 
    { 
     return value; 
    } 

    return int.MinValue; // or any other indication 
} 
1

如果將true/false映射到外部值是您的問題,那麼我會做類似的事情。

var mapping = new int[] { externalValueFalse, externalValueTrue}; 

private static int GetValue(bool val) 
{ 
    return mapping[val ? 1 : 0]; 
}