创建一个唯一的字典并添加自动增加的整数值

时间:2017-10-18 08:54:31

标签: c# linq

如何为每个不同的密钥添加唯一编号?

最后,我想要一个不同键的“集合”,但每个键也应该有一个值,例如, current_index_of_collection + 1

elements.SelectMany(p => p.Properties.Keys).Distinct();

示例输出:

Key value
a   1
b   2
c   3
d   4

3 个答案:

答案 0 :(得分:1)

您在寻找Select((value, index) => ...)吗?

https://msdn.microsoft.com/en-us/library/bb534869(v=vs.110).aspx

var dictionary = elements
  .SelectMany(p => p.Properties.Keys)
  .Distinct()
  .Select((key, index) => new {
     key = key,
     value = index + 1, 
   })
  .ToDictionary(item => item.key, item => item.value);

或者

var array = elements
  .SelectMany(p => p.Properties.Keys)
  .Distinct()
  .Select((key, index) => new KeyValuePair<MyKeyType, int>(key, index + 1))
  .ToArray(); 

答案 1 :(得分:1)

您可以使用具有索引字段的1-重载:

Select

或者在您的代码中:

string[][] elements = new string[][] { new string[] { "a", "b", "a" } };
var elementsWithIndex = elements.SelectMany(p => p)
                                .Distinct()
                                .Select((p, i) => new { Key = p, Value = i + 1 });

答案 2 :(得分:1)

你可以简单地使用它。

    List<string> keys = new List<string>();
    keys.Add("a");
    keys.Add("b");
    keys.Add("c");
    keys.Add("d");
    keys.Add("e");
    keys.Add("f");
    keys.Add("g");


 var fields = keys.Distinct().Select ((t,val)=> new { Key= t, Value= (val + 1)});