Избежание одной и той же ключевой ошибки в словаре с суффиксом - PullRequest
1 голос
/ 24 ноября 2011

У меня не может быть того же ключа.Но в простом (и эффективном) решении ставится суффикс после ключа.

Но так как я нахожусь в foreach, мне был нужен быстрый и чистый способ добавить числовой суффикс к дублированным ключам.

Например:

Мой foreach таков:

foreach (Item item in items) {
    dic.Add(item.SomeKey, item.SomeValue);
}

Но я не хочу дублировать ключи, поэтому мне нужно «обработать» SomeKey, чтобы Origin стал Result

SomeKey Происхождение: key, clave, clave, chave, chave, chave
SomeKey Результат: key, clave, clave1, chave, chave1, chave2


Редактировать: Мой ответ на @KooKiz лучше объяснить вопрос.

У меня естьнесколько дублированных записей.Я просто пытаюсь понять, как then increment the suffix until you find no item.Звучит как изобретать колеса, поэтому мне было интересно, если кто-нибудь знает хороший способ сделать это

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011

Это может быть не самым быстрым, но это более читабельный, я могу думать:

        var source = new List<Tuple<string, string>>
        {
            new Tuple<string, string>("a", "a"),
            new Tuple<string, string>("a", "b"),
            new Tuple<string, string>("b", "c"),
            new Tuple<string, string>("b", "d"),
        };

        var groups = source.GroupBy(t => t.Item1, t => t.Item2);

        var result = new Dictionary<string, string>();

        foreach (var group in groups)
        {
            int index = 0;

            foreach (var value in group)
            {
                string key = group.Key;

                if (index > 0)
                {
                    key += index;
                }

                result.Add(key, value);

                index++;
            }
        }

        foreach (var kvp in result)
        {
            Console.WriteLine("{0} => {1}", kvp.Key, kvp.Value);
        }
1 голос
/ 24 ноября 2011

Если вам нужен ключ с несколькими «под» элементами, попробуйте это

Dictionary<string, List<string>> myList = new Dictionary<string, List<string>>();
foreach (Item item in items)
{
    if (myList[item.SomeKey] == null)
        myList.Add(item.SomeKey, new List<string>());
    myList[item.SomeKey].Add(item.SomeValue);
} 
0 голосов
/ 24 ноября 2011
var a = items.GroupBy(p => p.SomeKey)
.SelectMany(q => q.Select((value, index) =>
 new Item { SomeKey = (q.Count() > 1 && index > 0) ? value.SomeKey + (index) :  
         value.SomeKey, SomeValue = value.SomeValue }))
.ToDictionary(p => p.SomeKey, q => q.SomeValue);
...