2014-01-29 43 views
0

這是我在這裏的第一個問題。如何使用LINQ將列表轉換爲字典?

我想將Meter存儲在字典中,其中MeterUID是Key且Meter是值。 這是我的代碼有:

public static List<Meter> LoadMeterListFromFile() 
{ 
    var meters = new List<Meter>(); 

    foreach (var line in File.ReadAllLines(@"C:\MyLog.Log")) 
    { 
     var columns = line.Split(';'); 
     meters.Add(new Meter 
     { 
      TimeStamp = columns[0], 
      MeterUID = columns[1], 
      Something1 = Convert.ToInt32(columns[2].Replace("Something1=", "")), 
      Something2 = Convert.ToInt32(columns[3].Replace("Something2=", "")), 
      Something3 = Convert.ToInt32(columns[4].Replace("Something3=", "")), 
      Something4 = Convert.ToInt32(columns[5].Replace("Something4=", "")), 
      Something5 = Convert.ToInt32(columns[6].Replace("Something5=", "")) 
     }); 
    } 

    return meters; 
} 

但林不知道如何做到這一點,所以我希望你們能幫助。

+0

所以你要將對象保留爲值並將'object.MeterUID'作爲關鍵字? – Habib

回答

4
var dict = meters.ToDictionary(m => m.MeterUID, m => m); 
+0

顯然,我們認爲一樣:-) –

+0

簡短,甜美,並重點。 –

2

你可以簡單地嘗試這個辦法:

var metersDict= meters 
       .ToDictionary(e => e.MeterUID , StringComparer.OrdinalIgnoreCase); 
+0

爲什麼初始化? – sasjaq

+0

+1爲不同的東西,它的工作原理 – Habib

0

這很簡單:

var dict = meters.ToDictionary(m => m.MeterUID, m => m); 
1

更改方法簽名IDictionary<string, Meter>,然後返回列表之前調用ToDictionary

public static IDictionary<string, Meter> LoadMeterListFromFile() 
{ 
    var meters = new List<Meter>(); 

    // ... 
    // current implementation 

    return meters.ToDictionary(meter => meter.MeterUID); 
} 

你的方法但是,可以通過返回一個IEnumerable<Meter>,並使用yield加以改進,一次返回一個元素,

public static IEnumerable<Meter> LoadMeterListFromFile() 
{ 
    foreach (var line in File.ReadAllLines(@"C:\MyLog.Log")) 
    { 
     var columns = line.Split(';'); 
     yield return new Meter 
      { 
       TimeStamp = columns[0], 
       MeterUID = columns[1], 
       Something1 = Convert.ToInt32(columns[2].Replace("Something1=", "")), 
       Something2 = Convert.ToInt32(columns[3].Replace("Something2=", "")), 
       Something3 = Convert.ToInt32(columns[4].Replace("Something3=", "")), 
       Something4 = Convert.ToInt32(columns[5].Replace("Something4=", "")), 
       Something5 = Convert.ToInt32(columns[6].Replace("Something5=", "")) 
      }; 
    } 
} 

,然後將結果轉換爲一個字典,

var meters = LoadMeterListFromFile().ToDictionary(meter => meter.MeterUID);