2015-12-11 142 views
1

我有我稱之爲Actions看起來像這樣基於關鍵

public class Actions 
{ 
     public string Type { get; set; } 
     public string Observations { get; set; } 

     public Actions(
      string type, 
      string observations) 
     { 
      Type = type; 
      observations= type; 
     } 
} 

列表列表列表 獲取自定義對象T,那我後來在一個列表中使用像 List<Actions> data= new List<Actions>();

此列表將持有各種鳥類,以及他們觀察到的時間。這些數據來自我逐一閱讀的文件。因此,在一個循環內,我可能會發現Eagle, 1,這意味着我必須在該列表中找到具有type==Eagle的對象,併爲其鍵添加+1。

我可以遍歷這個列表當然,並檢查它的i th對象的type鍵,有我想要的值,並增加它的observations

有沒有人知道我做了什麼後更好的方式?

回答

4

我可以迭代這個列表當然,並檢查它的第i個對象的類型鍵,有我想要的值,並增加它的觀察值。

是的,這將工作。

你會做這樣的:

var birdToUpdate = birdList.FirstOrDefault(b => b.Type == keyToFind); 
if (birdToUpdate == null) 
{ 
    birdToUpdate = new Actions(keyToFind, 0); 
    birdList.Add(birdToUpdate); 
} 
birdToUpdate.Observations++; 

如果返回None,這對於那些鳥先觀察,所以你添加它。

再後來,如果你想添加顏色到搭配:

var birdToUpdate = birdList.FirstOrDefault(b => b.Type == keyToFind 
              && b.Color == colorToFind); 
if (birdToUpdate == null) 
{ 
    birdToUpdate = new Actions(keyToFind, colorToFind, 0); 
    birdList.Add(birdToUpdate); 
} 
birdToUpdate.Observations++; 

另一個辦法是放棄這個類entirey並引入Dictionary<string, int>其中關鍵是鳥的名稱和int觀察的數量。

或者,如果你堅持使用這個課程,那麼請爲該課程考慮一個合適的名稱並使其成爲Dictionary<string, Actions>

僞:

Actions actionForBird; 

if (!dictionary.TryGetValue(keyToFind, out actionForBird)) 
{ 
    actionForBird = new Actions(keyToFind, 0); 
    dictionary[keyToFind] = actionForBird; 
} 

actionForBird.Observations++; 
+0

其實起初我有完全相同的事情你建議使用我的數據字典。但不幸的是,我不能將它改成字典,因爲只是現在我只需要擔心觀察,很快我可能不得不擔心顏色,位置等等。所以我必須轉儲字典,然後不能使用'TryGetValue'了。 – dearn44

+0

如果我使用多個詞典,每個可能的關鍵詞之一(例如觀察),直到我形成我的數據,然後當每個變量準備好在自己的詞典中時,我可以將它們合併到最終的對象中? – dearn44

+0

我在查看'FirstOrDefault()'如何解決我的問題時遇到困難? – dearn44

0

請嘗試使用字典

lambda表達式

例如

var type = 'eagle'; 
Dictionary<string, int> observations = new Dictionary<string, int>(); 
var obj = observations.FirstOrDefault(p => p.Key == type); 

把用戶輸入到var type

+0

爲什麼使用字典,如果你要遍歷所有密鑰('FirstOrDefault')? – CodeCaster

+0

不幸的是,現在不可能改變數據類型。 – dearn44

+0

使用字典的關鍵在於它包含一個散列表,它通過鍵(O(1))操作來檢索值。你正在迭代字典,這可能是一個O(n)(更糟糕的)。 –