0

我有一个List,我想把它转换成一个Dictionary. List我在将 a转换为时没有任何问题,Dictionary但我想检查中的键Dictionary是否存在,如果存在我应该忽略KeyValuePair并继续下一个字符串。

这是示例。

IEnumerable<String> readlines = File.ReadAllLines("C:\Text.txt");
List<string> lines = new List<string>();
lines = readlines.ToList();
Dictionary<string, string> keyPair= new Dictionary<string, string>();         
keyPair= test.ToDictionary(s=>s.Split('=')[1], s=>s.Split('=')[0]);  
keyPair.Keys.ToList().Sort();

如果相同的键重复,则 lambda 表达式会抛出异常,我想检查该键是否存在并继续将下一个字符串转换为字典。完成键排序后,我想将字典转换回列表。有没有办法用 LINQ 做到这一点?

4

2 回答 2

0

首先按您的键分组

看到这个问题: 使用 linq 将列表转换为字典,而不用担心重复

像这样的东西应该适合你:

var dictionary = lines.GroupBy(s => s.Split('=')[1], x => x.Split('=')[0])
                      .ToDictionary(g => g.Key, g => g.First());

您可以根据自己的喜好更改值选择器的逻辑

于 2013-01-16T10:30:26.563 回答
0

如果您希望将结果作为列表,则没有理由将其放入字典中。

拆分键上的每个项目和组,对键上的组进行排序,然后从组中选择所需的值。如果我理解正确,您只需要每个键的第一个值:

List<string> lines = File.ReadAllLines(@"C:\Text.txt").ToList();
lines =
  lines.Select(x => x.Split('='))
  .GroupBy(a => a[0])
  .OrderBy(g => g.Key)
  .Select(g => g.Key + "=" + g.First()[1])
  .ToList();
于 2013-01-16T10:35:09.100 回答