Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc
Titulní Blogy Fotky Soubory

2P.Knowledge.Blog.API

Power Collections

Základní knihovna tříd .NET frameworku obsahuje ve jmenných prostorech System.Collections a System.Collections.Generic implementaci základních netypových respektive (mých oblíbených) typových kolekcí. Nicméně pokud jste například někdy pracovali v Javě a používali kolekce z JCF (Java Collection Framework) jistě jste při používání kolekcí v .NET poznali, že to není to na co jste zvyklí. Ale i pokud jste Javou nedotknutí, možná mi dáte za pravdu, že základní podpora kolekcí v .NET není na všechny situace adekvátně připravena.

Pokud máte občas výše zmiňované pocity vyzkoušejte Wintellect's Power Collections for .NET. Tento zajímavý open source projekt si klade za hlavní cíl implementovat kolekce, které nejsou v BCL k dispozici. Všechny implementované kolekce jsou silně typované díky použití generik. Implementované kolekce jsou jak takové, které nemají, co se funkcionality týče, protějška v BCL (Set, Bag, Deque..), ale i takové, které mají funkcionality stejnou, nicméně efektivněji implementovanou (BigList například). Dále v této knihovně najdete velkou množinu různých utilit pro práci s kolekcemi. Tyto utility nejsou vázány na použití kolekcí z Power Collections, ale používají standardních rozhraní .NETu (IEnumerable...), takže je můžete použít i pro standardní kolekce z BCL.

Pro inspiraci zde uvedu pár ukázek použití. Tak například je zde implementována kolekce Set, kterou dobře znají "Javisti". Jedná se o nesetříděnou kolekci, která neobsahuje duplikátní prvky.

//vytvoreni instanci
Set<int> firstSet = new Set<int>();
Set<int> secondSet = new Set<int>();
//naplneni prvky
firstSet.Add(1);
firstSet.Add(2);
secondSet.Add(2);
secondSet.Add(3);
secondSet.Add(4);
//ziskani prvku, ktere jsou v jinem setu jine
Set<int> differences = secondSet.Difference(firstSet);
Console.WriteLine("Different items in second set : ");
foreach (int item in differences)
{
 
Console.WriteLine(item);
}

Další zajímavou implementovanou kolekcí v Power Collections je MultiDictionary. Tato implementace slovníku je rozdílná od standardní v tom, že může pod jedním klíčem uchovávat více hodnot.

 MultiDictionary<int, string> dict = new MultiDictionary<int, string>(true);
//naplneni daty
dict.Add(1, "First item for '1'");
dict.Add(1,
"Second item for '1'");
dict.Add(2,
"First item for '2'");
dict.Add(2,
"Second item for '2'");
//pro kazdy klic je vypsana mnozina hodnot
foreach (KeyValuePair<int, ICollection<string>> pair in dict)
{
 
Console.WriteLine("VALUES FOR KEY '{0}' : ", pair.Key);
 
foreach (string value in pair.Value)
  {
    
Console.WriteLine(value);
  }
  Console.WriteLine();
}

Užitečná může být i struktura Pair pro pohodlnou práci s dvojicí hodnot.

Dictionary<Pair<int, string>, string> dict = new Dictionary<Pair<int, string>, string>();
dict.Add(
new Pair<int, string>(1, "Hello"), "First item");
dict.Add(
new Pair<int, string>(2, "World"), "Second item");
string itemFromDict = dict[new Pair<int, string>(1, "Hello")];

Statická třída Algorithms obsahuje implementace spousty algoritmů, které při práci s kolekcemi nezřídka přijdou vhod. Například můžete spočítat kolik prvků v kolekci splňuje nějakou podmínku, kterou definujete implementací delegáta Predicate<T>. V ukázce je použita kolekce Bag, která je podobná kolekci Set, s tím rozdílem, že může obsahovat duplikátní prvky.

Bag<int> bagOfInts = new Bag<int>();
bagOfInts.Add(1);
bagOfInts.Add(2);
bagOfInts.Add(3);
Predicate<int> predicate = delegate(int item)
{
 
return item > 1;
};
int count = Algorithms.CountWhere<int>(bagOfInts, predicate);
Console.WriteLine(count);

Na třídě Algorithms jsou dále implementovány metody pro Binární prohledávání, řazení, kartézský součin, naplňování kolekcí atd.

Pokud tedy patříte mezi ty, kterým ne vždy stačí standardní možnosti kolekcí v .NET neváhejte sáhnout pro tuto knihovnu, která je hostována na CodePlex (Microsoft repository pro open source projekty), přesně zde http://www.codeplex.com/PowerCollections .

Zveřejněno 27. října 2007 15:46 by Puschak
Vedeno pod:

Komentář

Žádné komentáře
Neregistrovaní uživatele nemužou přidávat komentáře.
Powered by Community Server (Personal Edition), by Telligent Systems
Vyvojar.cz na prodej!