2014-03-19 77 views
0

我正在使用C#(.NET 4.0)。我有一個在分割值後識別C#列表中的不同項目

class Employee 
{ 
    public string Location { get; set; } 
    public int ID { get; set; } 
    public string FilterType { get; set; } 

    public Employee(string name, int id, string fType) 
    { 
     Location = name; 
     ID = id; 
     FilterType = fType; 
    } 
} 


List<Employee> empList = new List<Employee>(); 

Employee e = new Employee("[IND].[MH].&1", 1, "="); empList.Add(e); 
e = new Employee("[SNG].[Tampines].&1", 7, "="); empList.Add(e); 
e = new Employee("[IND].[MP].&2", 5, "="); empList.Add(e); 
e = new Employee("[USA].[NYC].&2", 9, "="); empList.Add(e); 
e = new Employee("[IND].[MH].&3", 3, "="); empList.Add(e); 
e = new Employee("[IND].[MP].&1", 4, "="); empList.Add(e); 
e = new Employee("[SNG].[Bedok].&1", 6, "="); empList.Add(e); 
e = new Employee("[USA].[NYC].&1", 8, "="); empList.Add(e); 
e = new Employee("[IND].[MH].&2", 2, "="); empList.Add(e); 

我想要做什麼:

  1. 分割由」的empList的 '名' 屬性。 &'
  2. 這將返回2個項目的數組。我將數組[0]添加到字典中。
  3. 這將創建一個獨特的項目清單(讓我們把它叫做唯一列表)
  4. 然後在獨特的列表中的每個項目,我會循環遍歷empList和每一個項目我將結合名這樣

如果唯一列表中的項目是'[USA]。[NYC]',在遍歷empList之後,輸出應該是{[USA]。[NYC]。 & 1,[USA]。[NYC]。 & 2}。如果唯一列表中的項目是'[SNG]。[淡濱尼]',則輸入應該是'{[SNG]。[淡濱尼]。 & 1}「

我可以做這樣的

運行的東西在empList一個循環做到這一點 - 通過拆分名稱」。 &'並在詞典中添加結果以確保只添加唯一項目

然後在唯一列表上運行一個循環 - 在此循環內運行empList上的另一個循環,並檢查empList中的當前項是否包含uniqueList的項目並執行字符串操作。

我想知道是否有一個更聰明的方法來實現這一點。

謝謝

+2

您正在關注*方法*太多的力學。描述你想要達到的目標會更有成效,因爲無論如何,這聽起來不是這樣做的。對於初學者來說,爲什麼'Location'是一個啞巴的字符串? – Jon

+0

@Jon:感謝您的評論。我給了這麼多細節的唯一原因是因爲通常人們問,你試過了什麼?爲什麼loaction是愚蠢的字符串 - 這是數據存儲多維數據集(SSAS)的格式。我需要操作鍵來形成查詢。 – SharpCoder

+1

TL; DR:在更高的抽象層面描述你的目標。好意的榮譽,但「機械師」和「細節」並不是一回事。 「我想按照所有者分組小部件並找到最多的所有者」就是細節。 「我想分割。&並將[X]。[Y]轉換爲{[X]。[Y]&1 ....}」是力學。其實這聽起來不像你想要*分裂*本身。你想要做別的事情,你認爲分裂是實現目標的方法,但在這方面你可能是錯的。請參閱[什麼是XY問題?](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – Jon

回答

0

是的,有一個更簡單的方法。您可以按功能使用LINQ組:

var grouped = from emp in empList 
        group emp by emp.Location.Split('&')[0] into g 
        select new {LocCode = g.Key, Emps = g}; 

    foreach (var group in grouped) { 
     // group.LocCode contains, e.g., [USA].[NYC]., 
     // group.Emps contains all employees at this location 
    }