ITHS Tenta 2 Flashcards
Beskriv i vilka fall man skall använda följande typer av klasser:
klasser basklass & subklasser Abstrakta basklasser Interface Generiska klasser
Använd klasser för att beskriva “substantiv”, gruppera egenskaper som hör ihop.
Om klasserna har något gemensamt, skapa en hierarki med basklass och subklasser. Använd abstrakta basklasser om man inte ska kunna skapa objekt av en basklass.
Använd interface om klasser har något gemensamt, men inte kan ingå i samma hierarki.
Använd generiska klasser om man ska kunna skapa “skräddarsydda” versioner av en klass.
Besrkiv vad genrics är
Generirka klasser introducerar konceptet av “typ parametrar”, vilket gör det möjligt att designa klasser och metoder som avvaktar specifikationen av en eller flera “typer” tills klassen eller metoden är instansierad eller deklrarerad av client kod.
Varför är Generics användbart?
Generiska metoder och klasser kombinerar återanvändbarhet, type safety och effektivitet som ikke generiska klasser och metoder inte har möjlighet till.
Vad kan man applicera generics på?
Generics can be applied to interface, abstrct class, method, static method, property, event, delegate and operator.
Vad används listor till?
Vi använder listor på samma sätt som arrayer, fast vi behöver inte bestämma storleken på dem. Listor har många metoder för att manipulera innehållet eller välja ut det vi vill ha.
Vad är IEnumerable och hur använder sig Listor utav det?
Listor implementerar interfacet IEnumerable (sv. uppräkningsbar) vilket innebär att man kan använda dem med foreach. List list = new List(); list.Add(new Gorilla()); for( int i=0; i
Vad är Dictionary och vad kan man använda det till?
Dictionary är en generisk lista som vi kan använda för att slå upp elementen, i stället för att indexera. Dictionary population = new Dictionary(); population.Add("Grodd", new Gorilla()); population.Add("Gustav", new Gorilla()); Gorilla gustav = population["Gustav"];
Genom att använda sig av Queue kan man skapa en kö av objekt.
exempel: Queue numbers = new Queue();
Vad är Enqueue och Dequeue och hur skulle man använda sig av dem i samband med kö variablen ovan ?
Enqueue lägger till ett element sist i kön
Dequeue plockar ut det äldsta
numbers.Enqueue("one"); Console.WriteLine("Peek at next item to dequeue: {0}",
Genom att initiera en stack skapar man en kö där man kan lägga/plocka ut till ett objekt (Last in/out).
Exempel:
Stack numbers = new Stack();
Vad är Push och pop, samt hur kan man använda dem i samband med koden ovan?
Push lägger till ett element
överst på kön.
Pop plockar ut det översta
numbers.Push("one"); Console.WriteLine("Popping '{0}'", numbers.Pop());
Nämn och beskriv 6 typer av Listor/Mängder/Samlingar
Array - indexera element, fast storlek List - indexera element, variabel storlek Dictionary - slå upp element effektivt Stack - last-in, first-out Queue - first-in, first-out Hashtable (sv. hacka)
Vad står LINQ för?
LINQ = Language INtegrated Query
Vad kan Linq användas på för objekt?
Kan användas på allt som implementerar IEnumerable
Vad använder vi LINQ till?
Används för att skapa nya collections genom att filtrera, ändra och sortera listor
Vad menas med Lazy evaluation i samband med LINQ och hur använder man det?
Använder lazy evalutation - resultatet räknas inte ut förrän man loopar igenom resultatet med foreach (använd metoden ToList för att tvinga uträkning)
Vad används LINQ ofta tillsammans med?
Varning! LINQ används ofta med delegates och extension methods. Vi tar upp dem senare i kursen.
Vilka 2 obligatoriska ord måste man använda sig av om man använder LINQ?
LINQ använder en speciell syntax med två obligatoriska ord: from och select. Vi kan lägga till where för att filtrera listan.
List nums = new List(new int[] { 5, 4, 3, 2, 1 }); var query = from variabelnamn in nums where villkor select resultat;
List nums = new List(new int[] { 5, 4, 3, 2, 1 }); var query = from variabelnamn in nums where villkor select resultat;
Vad har query för datayp?
// Query har datatypen IEnumerable
from n in ns
Med LINQ vad motsvarar uttrycket ovan?
FROM används för att skapa en loopvariabel och välja vilken collection vi ska plocka element från.
List nums = new List(new int[] { 5, 4, 3, 2, 1 }); var query = from n in nums where n >= 4 select n; // motsvaras av följande for-loop List newList = new List(); foreach( int n in nums ) if( n >= 4 ) newList.Add(n);
where n >= 4
med LINQ vad motsvarar utrrycket ovan?
WHERE fungerar som en if-sats, som väljer vilka element i listan som vi ska använda för att skapa den nya lista. Det kallas att filtrera listan.
List nums = new List(new int[] { 5, 4, 3, 2, 1 }); var query = from n in nums where n >= 4 select n; // motsvaras av följande for-loop List newList = new List(); foreach( int n in nums ) if( n >= 4 ) newList.Add(n);
select n
med LINQ vad motsvarar uttrycket ovan?
SELECT väljer ut det som ska läggas i den nya listan, motsvarar returvärde.
List nums = new List(new int[] { 5, 4, 3, 2, 1 }); var query = from n in nums where n >= 4 select n; // motsvaras av följande for-loop List newList = new List(); foreach( int n in nums ) if( n >= 4 ) newList.Add(n);
var query = from n in nums where n % 2 == 1 select n;
Vilket svar får vi från queryn ovan?
// Alla udda tal i listan var query = from n in nums where n % 2 == 1 select n;
var query = from n in nums where n >= 2 && n <= 4 select n;
Vilket svar får vi från queryn ovan?
// Alla tal mellan 2 och 4 var query = from n in nums where n >= 2 && n <= 4 select n;
med LINQ och om man använder sig av select kan man förändra variabeln man väljer ut?
// Man måste inte välja ut variabeln oförändrad // Alla tal i listan, multiplicerade med 10 var query = from n in nums select n * 10;
I LINQ vad används orderby till ?
Man kan lägga till orderby för att sortera en lista.
var query = from variabelnamn in nums
where villkor
orderby sorteringsnyckel [ascending/descending]
select resultat;
Hur använder vi ascending och decending i ett LINQ uttryck?
Använd ascending (stigande) eller descending (fallande) för att bestämma sorteringsordning.
var query = from variabelnamn in nums
where villkor
orderby sorteringsnyckel [ascending/descending]
select resultat;
var query = from n in nums orderby n select n;
Hur sorteras uttrycket ovan ?
// Sortera i nummerordning
var query = from n in nums orderby -n ascending select n
Hur sorteras uttrycket ovan ?
// Sortera i omvänd ordning // ascending har ingen effekt
var query = from n in nums orderby "" + n descending select n;
Hur sorteras uttrycket ovan ?
// Sortera som strängar fallande
Vad används gruppering till i LINQ?
Gruppering är ett sätt att klumpa ihop liknande
värden, för att behandla dem samtidigt. Några
exempel är summa, medelvärde, min och max.
Vad behöver man för att gruppera med LINQ?
För att gruppera med LINQ behöver man ange en grupperingsnyckel. Ofta är den en egenskap i objekten man har i listan.
var query = from variabelnamn in nums
group variabelnamn by grupperingsnyckel into gruppnamn
where villkor
orderby sorteringsnyckel
select resultat;
Om du har en lista med som ser ut som följer:
Username Articled Vote
Anna 1 1
Nisse 1 1
Anna 1 1
Nisse 1 1
Sen kör du LINQ uttrycket nedan, hur kommer kommer svaret på queryn se ut?
from user in userList
group user by user.Username into usernameGroup
Anna 2 2
Nisse 2 2
Alla rader med samma värde på Username “klumpas ihop”.
Vad får du ut av queryn nedan?
var doubles = from n in numberList group n by n into nGroup where nGroup.Count() > 1 select nGroup.First();
IEnumerable interfacet har många metoder som kan användas med Linq Queries. Beskriv vad metoderna nedan gör.
Average - Count - Distinct - First, Last - Max, Min - Reverse -
Single - Skip(x) - Sum - Take(x) - ToArray, ToList, ToDictionary - FirstOrDefault, LastOrDefault, SingleOrDefault -
Average - medelvärdet Count - antalet element Distinct - tar bort dubbletter First, Last - returnerar första respektive sista elementet, körfel om det inte finns några element Max, Min - största eller minsta värdet Reverse - vänder på elementens ordning
Single - returnerar ett element om det finns exakt ett, körfel annars
Skip(x) - hoppar över de första x elementen
Sum - returnerar summan av alla element
Take(x) - plockar de första x elementen
ToArray, ToList, ToDictionary - gör om en collection till en annan datastruktur
FirstOrDefault, LastOrDefault, SingleOrDefault - fungerar som First/Last/Single men returnerar defaultvärdet (null eller 0) om det inte finns några element i stället för körfel
Vad får du ut av nedstående LINQ Utryck?
var query = from book in library where book.Genre == "biography" select book;
// Välj ut alla böcker som tillhör genren biografier var query = from book in library where book.Genre == "biography" select book;
Hur plockar du ut den 5 boken ur queryn nedan?
var query = from book in library where book.Genre == "biography" select book;
// Välj ut alla böcker som tillhör genren biografier var query = from book in library where book.Genre == "biography" select book; // Plocka bok nr 5 var skip4 = query.Skip(4); // alla utom de 4 första elementen var take1 = skip4.Take(1); // en collection med ett element Book book = take1.Single(); // plocka det första elementet var book5 = query.Skip(4).Take(1).Single(); // allt på en rad!
med select kan man skapa anonyma objekt, vad innebär det?
När vi använder select för att bestämma vad som ska returneras, så kan vi skapa anonyma objekt. De kallas anonyma eftersom de inte har någon klass. // Skapar collection med anonyma objekt var query = from n in nums select new { Number = n, HalfNumber = n * 0.5 }; // Klass som motsvarar det anonyma objektet class MyObject { public int Number { get; set; } public double HalfNumber { get; set; }
vad kan man göra med LINQ uttrycket join?
Skriv gärna ett uttryck, och testa.
Man kan kombinera två collections med join. Här är exempel på INNER JOIN.
var innerJoin = from v1 in collection1
join v2 in collection2 on
v1.Property equals v2.Property
select new { Property = v1.Property,
Value1 = v1.Value, Value2 = v2.Value };
foreach( var x in query )
Console.WriteLine(“Found object with property=” + x.Property
+ “ and values “ + x.Value1 + “, “ + x.Value2);
i LINQ finns något som heter group join, vad är det och hur används det?
skriv gärna ett uttryck och testa.
En GROUP JOIN är ett sätt att associera element. Exempel
var groupJoin = from c in categories
join p in products on
c.Name equals p.CategoryName into prodGroup
select new { CategoryName = c.Name,
Products = prodGroup };
Uttrycket resulterar i en collection av anonyma objekt, som har egenskaperna CategoryName och Products. Egenskapen Products kommer att vara en collection med Product-objekt.