2017-07-05 48 views
6

मुझे इस तरह दिखने वाले शब्दकोश को खोजने में कोई समस्या है।खोज शब्द मूल्य और वापसी कुंजी की शर्तों की सूची

Dictionary<string, string[]> dic = new Dictionary<string, string[]>(){ 
    {"a", new string[](){"a_val","2"}}, 
    {"b", new string[](){"b_val","1"}}, 
    {"b", new string[](){"b_val","0"}} 
}; 

मैं कुंजी जहां stingArray [1] तत्व का मान से बड़ा है की एक सूची प्रदान करने की जरूरत है "1" की तरह:

List<string> list = new List<string>{ 
    "a" 
}; 

क्योंकि मैं का उपयोग करने में वास्तव में अच्छा नहीं कर रहा हूँ LINQ, मेरा वर्तमान समाधान शब्दकोश पर फिर से चल रहा है और कुंजी को एक नई सूची में जोड़ रहा है। लेकिन वह विधि बदसूरत लगती है और मैं समस्या का एक और समाधान ढूंढने की कोशिश कर रहा हूं।

+0

Wht डबल तारांकन (**) के लिए खड़े है पर एक नजर है? –

+1

@CasparKleijne गैर-लागू ** बोल्ड ** स्वरूपण। –

+1

मैं उस इंडेक्स को हाइलाइट करना चाहता था, लेकिन यह कोड-प्रारूप में काम नहीं करता था। मैं इसे हटा दूंगा। – McNade

उत्तर

11

: Where बयान के साथ

var list = dic.Where(x => int.Parse(x.Value[1]) > 1) 
       .Select(x => x.Key) 
       .ToList(); 

प्रविष्टियों जहां Value[1] अधिक 1 फ़िल्टर किया जाएगा और Select कथन के साथ इस प्रविष्टियों की कुंजी का चयन किया जाएगा। कम से कम संग्रह विधि के साथ List में परिवर्तित हो जाएगा।

अधिक जानकारी के लिए 101 LINQ Samples in C#

+0

के बजाय एक शब्दकोश > पर विचार करना चाहेंगे, धन्यवाद, यह पूरी तरह से काम करता है और उन नमूने महान हैं। – McNade

+1

आपका स्वागत है :-) –

+1

@ माईटीबाडबूम आपका स्वागत है ;-) –

3

प्रयास करें इस (आप शब्दकोश परिभाषा कुछ संकलन में त्रुटियाँ हैं और मैं कुछ अनुमान किया जाता हैं): किसी भी त्रुटि से निपटने के बिना

 static void Main(string[] args) 
    { 
     var dic = new Dictionary<string, string[]>(){ 
     {"a", new string[]{"a_val","2"}}, 
     {"b", new string[]{ "b_val","1"}}, 
     {"c", new string[]{ "b_val","0"}}}; 
     string[] expected = dic 
      .Where(kv => Convert.ToInt32(kv.Value[1]) > 1) 
      .Select(kv => kv.Key).ToArray(); 
    } 
संबंधित मुद्दे