2011-05-04 67 views
0

有沒有更好的方式來編碼其中這樣的:IDictionary的幫助過濾項目

IDictionary<string, string> p = new Dictionary<string, string>(); 
    p.Add("Apple", "1"); 
    p.Add("Orange", "2"); 
    p.Add("Pear", "3"); 
    p.Add("Grape", "4"); 
    p.Add("Pineapple", "5"); 
    //This is a unique list 

    var retVal = p.Where(k => k.Key.Contains("Apple") || k.Key.Contains("Pear") || k.Key.Contains("Grape")); 

一些歷史下面

我有一個字符串類似下面的詞典:

IDictionary<string,string> 

內容如下:

Apple,1 
Orange,2 
Pear,3 
Grape,4 
...many more 

如何從我的字典裏只返回幾個項目,像這樣

if (true) 
{ 
    //return only 3 apple,pear&grape items out of the dozens in the list into a new variable 
} 
+1

...這不是過濾,這是'取'3項。或者是? – xtofl 2011-05-04 14:10:12

+0

你想要返回什麼3件事?有很多方法可以只返回3個項目:基於索引順序的前3個,基於字母順序的前3個,隨機3個等。另外,「返回」是否意味着返回作爲方法調用的結果? – squillman 2011-05-04 14:10:36

+0

@xtofl和@squillman查看上面的更新。謝謝。 – Rod 2011-05-04 14:12:27

回答

4

你可以只取前3項...

theDictionary.Take(3); 

或過濾並取特定物品...

string[] itemsIWant = { "Apple", "Pear", "Grape" }; 

theDictionary.Where(o => itemsIWant.Contains(o.Key)); 

或排序隨機取3 ...

Random r = new Random(); 

theDictionary.OrderBy(o => r.Next()).Take(3); 
+0

請看我的3個具體項目(不再隨機)對不起混淆 – Rod 2011-05-04 14:36:37

+0

@rod:我已經更新了我的答案,但他們的方式你已經做得很好。 – 2011-05-04 15:16:04

0
+0

OP已經有一本字典。 – 2011-05-04 14:15:01

+0

他需要過濾嗎?有什麼問題:/ – Bas 2011-05-12 10:25:27

+0

是的,假設OP想要一個字典,所有其他答案都返回一個IEnumerable;因此,OP可能想用'.ToDictionary(x => x.Key,x => x.Value)'結束他的'.Take(3)'或'.Where(...)''。 +1的建議。 – 2011-06-14 22:14:26

0

,將真正取決於類型的過濾你想要達到的。但是你可以通過Linq來實現它。

如果你只是想拿到第3項,你可以做這樣的:

theDictionary.Take(3); 

如果你想獲得前3項與「G」開頭,則你會做到這一點:

theDictionary.Where(kv => kv.Key.StartsWith("G")).Take(3); 

如果你想拿到第3項以「G」不管外殼開始時,你會做到這一點:

theDictionary.Where(kv => kv.Key.ToLower().StartsWith("g")).Take(3); 

最後但並非最不重要的,如果你想隨機得到3個項目,你會這樣做:

Random rand = new Random(); 
theDictionary.OrderBy(kv => rand.Next()).Take(3); 
+0

這個答案實際上是早期答案的確切副本,沒有附加值或詳細信息。 – 2011-05-04 14:25:57

+1

@Anthony作爲一個有經驗的用戶,你可能知道在SO中發生的事情很快。你認爲我花了多少時間來寫答案?你有沒有意識到@Josh首先寫了一個非常簡短的答案?所以我決定寫一個更多的代碼並且更完整。然後喬希也完成了他的回答。你認爲有多少「不同的正確答案」用於過濾IDictionary? – 2011-05-04 14:30:22

+0

此外,初學者通常並不知道如何使用lambda表達式(鍵/值結構)處理IDictionary。我發佈的代碼也顯示了這一點。 – 2011-05-04 14:33:06