2016-09-28 44 views
1

我試圖返回一個屬性具有值設置的次數的列表。返回一個字符串作爲一個屬性在自定義對象列表中出現的次數

我試圖做到這一點,而不必硬編碼的價值來尋找,所以如果在後端的變化,我不會需要添加一個新的代碼行。

目前我有它的工作,但我已經手動設置值。

listCounts.Add(testList.Count(item => item.title == "Blah")); 
listCounts.Add(testList.Count(item => item.title == null)); 
listCounts.Add(testListt.Count(item => item.title == "test")); 
listCounts.Add(testList.Count(item => item.title == "Blarg")); 

這工作,但目前如果有的話chaanges,我得去和做這正是我想避免

+0

事先創建一個字符串數組,並檢查它是否包含'item.title' – Kilazur

+0

如何從配置文件中讀取要查找的值? –

回答

2

取決於你想要做什麼。它看起來像你想要那些鍵(標題)的計數?

一種方法是將您的標題分組,以給出計數,例如。

var listCounts = testList.GroupBy(item => item.title); 

由於使用本示例:

class Item 
    { 
     public string title; 
    } 

    static void Main(string[] args) 
    { 
     var testList = new List<Item> 
     { 
      new Item { title = "Blah" }, 
      new Item { title = "Blah" }, 
      new Item { title = "Blah" }, 
      new Item { title = null }, 
      new Item { title = null }, 
      new Item { title = "test" }, 
      new Item { title = "test" }, 
      new Item { title = "test" }, 
      new Item { title = "test" } 
     }; 


     var listCounts = testList.GroupBy(item => item.title); 

     foreach (var count in listCounts) 
     { 
      Console.WriteLine("{0}: {1}", count.Key ?? string.Empty, count.Count()); 
     } 

     Console.ReadKey(); 

    } 

缺點是你每次得到的計數 - 就像我說的,這取決於你想要達到的目的。一個簡單的改變會使得它成爲一個二元組(字符串,整數),每個標題將是一個關鍵字,並且該值將是標題出現的次數。

編輯

使用字典中,listCounts行更改爲:

var listCounts = testList.GroupBy(t => t.title).ToDictionary(i => i.Key ?? string.Empty, i => i.Count()); 

(注意,關鍵不能爲空,因此i.Key ?? string.Empty解決辦法,應罰款爲您的目的)

+0

這些數據正在用於填充chartjs餅圖 – Tbooty

+0

您如何用字典來做這件事? – Tbooty

+0

要使用字典,請將listCounts行更改爲:var listCounts = testList.GroupBy(t => t.title).ToDictionary(i => i.Key ?? string.Empty,i => i.Count()) ; (請注意,一個鍵不能爲空,因此i.Key ?? string.Empty解決方法,應該適用於您的目的) –

1

我們不知道你的後臺是什麼修改代碼,但它似乎你需要從它檢索的價值。

//string[] myStrings = new string[] { "Blah", null, "test", "Blarg" }; 
string[] myStrings = _backEnd.RetrieveValues(); 
listCounts.Add(testList.Count(item => myStrings.Contains(item))); 
相關問題