2014-01-29 32 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);