Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

anto84 avatar anto84 16 Точки

c# структура от данни - dictionary но с възможност за multiple вкарване не един и същ key

Здравейте,

искам да направя на C# структура от данни която да ми реши следния проблем - структурата трябва да може да приема различни имена за ключ и да изкарва ип-адреси в лист и да събира времето за логин на юзъра:

name ip-adress time-logged

alex 10.10.17.33 20min
peter 10.10.17.33 20min
ivan 10.10.17.33 20min
alex 212.50.118.81 30min

резултат

alex --> ip-adress: 10.10.17.33, 212.50.118.81, time-logged: 50min
ivan --> ip-adress 10.10.17.33 time-logged: 20min
peter --> ip-adress 10.10.17.33 time-logged: 20min

Ако използвам 

Dictionary<string, Tuple<List<string>, int>> map = new Dictionary<string, Tuple<List<string>, int>>();

ми гърми на ред4 когато вкарвам ключ "alex" за втори път и казва че вече е вкаран item със същия ключ. Явно Dictionary приема само уникални ключове.

Има ли някой идея как може да стане това с Dictionary или с друга по-подходяща структура?

 

 

Тагове:
1
Programming Basics 24/01/2015 22:15:15
Antoveravip avatar Antoveravip 67 Точки

Няма ли да стане както опитваш, но просто да си правиш проверка дали го имаш този ключ? И ако го имаш към него да си добавяш последващият запис? Ако не - тогава го създаваш този

0
mgulubov avatar mgulubov 73 Точки

Реално, на теб не ти трябва да се дублират key стойностите. Ако всяко име е отделен обект, който пази в себе си масив или списък с различните ИП-та, можеш спокойно да записваш логин и логаут времето за всяко отделно ИП.

Ако пък много държиш всеки логин да е нов запис и не търсиш ефикастност и пестене на място, то ползвай най-обикновен списък. Не ми се мисли обаче, как ще итерираш и боравиш с елементите, когато станат повечко :).

2
25/01/2015 00:48:29
ttitto avatar ttitto 1153 Точки

Виж ето това: MultiDictionary . Трябва да си инсталираш с Nuget Wintellect.PowerCollections и да го добавиш в референциите на проекта, в който ще го ползваш.

1
Filkolev avatar Filkolev 4482 Точки

След като си добавил в речника запис с даден ключ на теб не ти трябва да добавяш нов, просто обнови данните, асоциирани с този ключ. Например, дават ти:

alex 10.10.17.33 20min
alex 212.50.118.81 30min

След първия ред ще имаш ключ alex, със стойност списък (с един елемент) и число - 20.

След втория ред просто добави ип-то към списъка на alex, а числото увеличи с новата стойност и получаваш 20 + 30 = 50.

ип-тата сортирани ли трябва да са? Ако не - ползвай HashSet, той пази само уникални стойности, т.е. няма да има повторение на ип-та. Ако трябва и да са сортирани, ползвай SortedSet.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.