Diskuze: Víceklíčové Dictionary C#
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 13 zpráv z 13.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Kdybys nám vysvětlil, čeho chceš vy finále dosáhnout, třeba by se to dalo řešit jiným, elegantnějším způsobem...
Prostě potřebuji z nějaké kolekce (jakýmkoli způsobem ),vytahovat za
běhu klienty podle jejich Socketu nebo jména.
Dělám totiž aplikaci na chat a ve chvíli kdy přijde od někoho zpráva
netuším kdo to je jediné co vím je jeho Socket a data která mi od něj
přišla proto potřebuji podle toho socketu nějak zjistit jaký je to
klient(to je vlastní objekt) abych mohl jeho zprávu uložit do databáze a
rozeslat ostatním pod jeho jménem.
Zároven ale potrebuju nekdy zaslat danému klientovi zprávu ale vím pouze
jeho jméno a tak zase potrebuji vedet co je to za klienta.
Na to bych použil dva dictionary getbyid by koukalo do jednoho a getbyname do druheho
Ty jsi to asi nepochopil ja nechcu vrátit klic k danemu objektu ale chci mit vice klicu
No to jsem do te otázky napsal jako jednu s variant které bych se chtěl vyhnout. Ale očividně to bude asi nejlepší řešení.Zkusím ještě hledat.Možná ještě přijdete s nějakým lepším nápadem
V tom případě si udělej vlastní třídu, klidně odděděnou od Dictionary a klíčů si tam dej, kolik potřebuješ.
Udělej si prostě kolekci která bude dědit z listu a přidej si tam metody, které budou používat LINQ, třeba takto
class MyCollection:List<Client>
{
public Client GetClientById(int id)
{
return this.First(c=>c.Id==id);
}
public Client GetClientBySocket(string socket)
{
return this.First(c=>c.Socket==socket);
}
}
Něco o rychlosti vyhledávání v hashovací tabulce x listu jsi slyšel?

Díky to vypadá dobře očividně to funguje,na LINQ jsem se nikdy moc nedíval.Zajímalo by mně jak moc je to náročné,myslím výkonově a jak je to rychlé
Pomalé, lineární složitost.
Pokud ti vadí mít dva slovníky podle různých klíčů, tak ještě to můžeš udělat tak, že si uděláš
Dictionary<int, Client>
s daty
a k tomu
Dictionary<string,int>
který použiješ pro získání id z jména pro přístup do druhého Dictionary.
Pořád by jsi byl na (téměř) konstantní složitosti.
Luboše asi netrumfnu, ale kdybys chtěl vyšetřit jednu koleci a
nepotřeboval využívat všech výhod Dictionary , tak jsem si udělal takové
cvičení 
public class MyDictionary
{
private List<string> name = new List<string>();
private List<int> id= new List<int>();
private List<Client> clients = new List<Client>();
public void Add(string name,int id, Client client)
{
this.name.Add(name);
this.id.Add(id);
this.clients.Add(client);
}
//jednotlive
public Client GetById(int ID)
{
return clients[id.IndexOf(ID)];
}
public Client GetByName(string Name)
{
return clients[name.IndexOf(Name)];
}
//nebo pretizena metoda
public void Remove(int ID)
{
int index = id.IndexOf(ID);
clients.RemoveAt(index);
name.RemoveAt(index);
id.RemoveAt(index);
}
public void Remove(string Name)
{
int index = name.IndexOf(Name);
clients.RemoveAt(index);
name.RemoveAt(index);
id.RemoveAt(index);
}
}
Zobrazeno 13 zpráv z 13.