Skip to main content

Posts

Showing posts with the label ienumerable

Convert a collection of items to a string

Sunt cazuri cand avem liste pe care dorim sa le convertim intr-un string folosind un anumit delimitator. List<string> lista=new List<string>(){ "A" , "B" , "C" }; //Output: A, B, C, LINQ nu contine o solutie directa, putem incerca sa interam cu un foreach toate elementele din lista si sa le adaugam la un StringBuilder StringBuilder sb=new StringBuilder(); string format = "{0}, "; lista.ForEach(item => sb.AppendFormat(format, item)); Dar din pacate codul scris mai sus este echivalent cu un foreach clasic, doar ca iteram folosind LINQ. O solutie este sa folosim metoda String.Join, care primeste doi parametrii: -delimitatorul; -un array care contine lista de string-uri; Aceasta metoda functioneaza fara probleme, singura problema care o are este ca nu functioneaza pe obiecte generice de tip IEnumerable. Pentru a rezolva acest neajuns este sa apelam la extension method si sa ne scriem propria noastra metoda pentru IEnumerable. /// <...

Care este cea mai rapida metoda pentru a obtine index-ul unui element din IEnumerable

De cate ori nu v-ati lovit de acest caz? Sa aveti un obiect de tip enumerable si sa fim nevoiti sa obtineti indexul unui element. Exista mai multe metode pentru a rezolva aceasta problema, cea mai simpla din ele este: obj.ToList().FindIndex( x => x =="Blog" ) Pentru cazul in care am cautat elementul care are valoarea "Blog". Daca ne punem problema vitezei putem sa scriem noi o metoda popie: public static int FindIndex<T>(this IEnumerable<T> elemente, Predicate<T> conditie) { int index = 0; foreach (var item in elemente) { if (conditie(item)) { return index; } index++; } return -1; } Prima optiune ne sperie putin din cauta la ToList(). Ne punem problema performantei, am prefera parca sa nu folosim ToList() si sa mergem pe metoda scrisa de noi. elemente.Select((item, index) => new { item, index }) ...