The document discusses collections in C# programming. It shows examples of using List and Dictionary collections to store and retrieve data. A List is used to store integer values and later iterate through them. A Dictionary is used to store Customer objects mapped by ID. The document also demonstrates converting between collection types using ConvertAll and a custom converter.
3. Collections
using System;
using System.Collections.Generic;
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
List<int> myInts = new List<int>();
myInts.Add(1);
myInts.Add(2);
myInts.Add(3);
for (int i = 0; i < myInts.Count; i++)
{
Console.WriteLine("MyInts: {0}", myInts[i]);
}
}
}
}
4. Collections
using System;
using System.Collections.Generic;
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
List<int> myInts = new List<int>();
myInts.Add(1);
myInts.Add(2);
myInts.Add(3);
for (int i = 0; i < myInts.Count; i++)
{
Console.WriteLine("MyInts: {0}", myInts[i]);
}
}
}
}
5. Collections
using System;
using System.Collections.Generic;
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
List<int> myInts = new List<int>();
myInts.Add(1);
myInts.Add(2);
myInts.Add(3);
for (int i = 0; i < myInts.Count; i++)
{
Console.WriteLine("MyInts: {0}", myInts[i]);
}
}
}
}
6. Collections
using System;
using System.Collections.Generic;
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
List<int> myInts = new List<int>();
myInts.Add(1);
myInts.Add(2);
myInts.Add(3);
for (int i = 0; i < myInts.Count; i++)
{
Console.WriteLine("MyInts: {0}", myInts[i]);
}
}
}
}
7. Collections
using System;
using System.Collections.Generic;
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
List<int> myInts = new List<int>();
myInts.Add(1);
myInts.Add(2);
myInts.Add(3);
for (int i = 0; i < myInts.Count; i++)
{
Console.WriteLine("MyInts: {0}", myInts[i]);
}
}
}
}
8. Collections
using System;
using System.Collections.Generic;
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
List<int> myInts = new List<int>();
myInts.Add(1);
myInts.Add(2);
myInts.Add(3);
for (int i = 0; i < myInts.Count; i++)
{
Console.WriteLine("MyInts: {0}", myInts[i]);
}
}
}
}
9. Collections
using System;
using System.Collections.Generic;
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
List<int> myInts = new List<int>();
myInts.Add(1);
myInts.Add(2);
myInts.Add(3);
for (int i = 0; i < myInts.Count; i++)
{
Console.WriteLine("MyInts: {0}", myInts[i]);
}
}
}
}
MyInts: 1
MyInts: 2
MyInts: 3
Press any key to continue...
10. Collections - Dictionaries
• Let’s have the following class
namespace ConsoleApplicationCourseTest
{
public class Customer
{
public Customer(int id, string name)
{
_id = id;
_name = name;
}
private int _id;
public int ID
{
get { return _id; }
set { _id = value; }
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
}
11. Collections
• And have the following main
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
Dictionary<int, Customer> customers = new Dictionary<int, Customer>();
Customer cust1 = new Customer(1, "Cust 1");
Customer cust2 = new Customer(2, "Cust 2");
Customer cust3 = new Customer(3, "Cust 3");
customers.Add(cust1.ID, cust1);
customers.Add(cust2.ID, cust2);
customers.Add(cust3.ID, cust3);
foreach (KeyValuePair<int, Customer> custKeyVal in customers)
{
Console.WriteLine("Customer ID: {0}, Name: {1}",
custKeyVal.Key,
custKeyVal.Value.Name);
}
}
}
}
12. Collections
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
Dictionary<int, Customer> customers = new Dictionary<int, Customer>();
Customer cust1 = new Customer(1, "Cust 1");
Customer cust2 = new Customer(2, "Cust 2");
Customer cust3 = new Customer(3, "Cust 3");
customers.Add(cust1.ID, cust1);
customers.Add(cust2.ID, cust2);
customers.Add(cust3.ID, cust3);
foreach (KeyValuePair<int, Customer> custKeyVal in customers)
{
Console.WriteLine("Customer ID: {0}, Name: {1}",
custKeyVal.Key,
custKeyVal.Value.Name);
}
}
}
}
13. Collections
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
Dictionary<int, Customer> customers = new Dictionary<int, Customer>();
Customer cust1 = new Customer(1, "Cust 1");
Customer cust2 = new Customer(2, "Cust 2");
Customer cust3 = new Customer(3, "Cust 3");
customers.Add(cust1.ID, cust1);
customers.Add(cust2.ID, cust2);
customers.Add(cust3.ID, cust3);
foreach (KeyValuePair<int, Customer> custKeyVal in customers)
{
Console.WriteLine("Customer ID: {0}, Name: {1}",
custKeyVal.Key,
custKeyVal.Value.Name);
}
}
}
}
14. Collections
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
Dictionary<int, Customer> customers = new Dictionary<int, Customer>();
Customer cust1 = new Customer(1, "Cust 1");
Customer cust2 = new Customer(2, "Cust 2");
Customer cust3 = new Customer(3, "Cust 3");
customers.Add(cust1.ID, cust1);
customers.Add(cust2.ID, cust2);
customers.Add(cust3.ID, cust3);
foreach (KeyValuePair<int, Customer> custKeyVal in customers)
{
Console.WriteLine("Customer ID: {0}, Name: {1}",
custKeyVal.Key,
custKeyVal.Value.Name);
}
}
}
}
Customer ID: 1, Name: Cust 1
Customer ID: 2, Name: Cust 2
Customer ID: 3, Name: Cust 3
Press any key to continue...
15. Collections
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
Dictionary<int, string> customers = new Dictionary<int, string>();
for (int i = 0; i < 3; i++)
{
customers.Add(i,"Cust" + i);
}
foreach (KeyValuePair<int, string> custKeyVal in customers)
{
Console.WriteLine("Customer ID: {0}, Name: {1}",
custKeyVal.Key,
custKeyVal.Value);
}
Console.WriteLine();
customers[1] = "ZGTR";
foreach (KeyValuePair<int, string> custKeyVal in customers)
{
Console.WriteLine("Customer ID: {0}, Name: {1}",
custKeyVal.Key,
custKeyVal.Value);
}
}
}
}
16. Collections
namespace ConsoleApplicationCourseTest
{
class MainClass
{
public static void Main(String[] args)
{
Dictionary<int, string> customers = new Dictionary<int, string>();
for (int i = 0; i < 3; i++)
{
customers.Add(i,"Cust" + i);
}
foreach (KeyValuePair<int, string> custKeyVal in customers)
{
Console.WriteLine("Customer ID: {0}, Name: {1}",
custKeyVal.Key,
custKeyVal.Value);
}
Console.WriteLine();
customers[1] = "ZGTR";
foreach (KeyValuePair<int, string> custKeyVal in customers)
{
Console.WriteLine("Customer ID: {0}, Name: {1}",
custKeyVal.Key,
custKeyVal.Value);
}
}
}
}
19. Collections
• foreach danger
– NEVER EVER manipulate (insertion, deletion) a collection in a “foreach” statement
– Just iterate (and/or update if you want.)
– But Why?
42. Collections
public static void Main(String[] args)
{
List<int> list1 = new List<int> { 1, 2, 3, 4, 5 };
foreach (var i in list1)
{
Console.Write(i + ", ");
}
Console.WriteLine();
List<int> list2 = list1.ConvertAll(x => 2 * x);
foreach (var i in list2)
{
Console.Write(i + ", ");
}
}
43. Collections
public static void Main(String[] args)
{
List<int> list1 = new List<int> { 1, 2, 3, 4, 5 };
foreach (var i in list1)
{
Console.Write(i + ", ");
}
Console.WriteLine();
List<int> list2 = list1.ConvertAll(x => 2 * x);
foreach (var i in list2)
{
Console.Write(i + ", ");
}
}
44. Collections
1, 2, 3, 4, 5,
2, 4, 6, 8, 10, Press any key to continue...
public static void Main(String[] args)
{
List<int> list1 = new List<int> { 1, 2, 3, 4, 5 };
foreach (var i in list1)
{
Console.Write(i + ", ");
}
Console.WriteLine();
List<int> list2 = list1.ConvertAll(x => 2 * x);
foreach (var i in list2)
{
Console.Write(i + ", ");
}
}
45. Collections
public static void Main()
{
List<PointF> lpf = new List<PointF>();
lpf.Add(new PointF(27.8F, 32.62F));
lpf.Add(new PointF(99.3F, 147.273F));
lpf.Add(new PointF(7.5F, 1412.2F));
Console.WriteLine();
foreach (PointF p in lpf)
{
Console.WriteLine(p);
}
List<Point> lp = lpf.ConvertAll(new Converter<PointF, Point>(PointFToPoint));
Console.WriteLine();
foreach (Point p in lp)
{
Console.WriteLine(p);
}
}
public static Point PointFToPoint(PointF pf)
{
return new Point(((int)pf.X), ((int)pf.Y));
}
46. Collections
public static void Main()
{
List<PointF> lpf = new List<PointF>();
lpf.Add(new PointF(27.8F, 32.62F));
lpf.Add(new PointF(99.3F, 147.273F));
lpf.Add(new PointF(7.5F, 1412.2F));
Console.WriteLine();
foreach (PointF p in lpf)
{
Console.WriteLine(p);
}
List<Point> lp = lpf.ConvertAll(new Converter<PointF, Point>(PointFToPoint));
Console.WriteLine();
foreach (Point p in lp)
{
Console.WriteLine(p);
}
}
public static Point PointFToPoint(PointF pf)
{
return new Point(((int)pf.X), ((int)pf.Y));
}
47. Collections
public static void Main()
{
List<PointF> lpf = new List<PointF>();
lpf.Add(new PointF(27.8F, 32.62F));
lpf.Add(new PointF(99.3F, 147.273F));
lpf.Add(new PointF(7.5F, 1412.2F));
Console.WriteLine();
foreach (PointF p in lpf)
{
Console.WriteLine(p);
}
List<Point> lp = lpf.ConvertAll(new Converter<PointF, Point>(PointFToPoint));
Console.WriteLine();
foreach (Point p in lp)
{
Console.WriteLine(p);
}
}
public static Point PointFToPoint(PointF pf)
{
return new Point(((int)pf.X), ((int)pf.Y));
}
48. Collections
public static void Main()
{
List<PointF> lpf = new List<PointF>();
lpf.Add(new PointF(27.8F, 32.62F));
lpf.Add(new PointF(99.3F, 147.273F));
lpf.Add(new PointF(7.5F, 1412.2F));
Console.WriteLine();
foreach (PointF p in lpf)
{
Console.WriteLine(p);
}
List<Point> lp = lpf.ConvertAll(new Converter<PointF, Point>(PointFToPoint));
Console.WriteLine();
foreach (Point p in lp)
{
Console.WriteLine(p);
}
}
public static Point PointFToPoint(PointF pf)
{
return new Point(((int)pf.X), ((int)pf.Y));
}
49. Collections
public static void Main()
{
List<PointF> lpf = new List<PointF>();
lpf.Add(new PointF(27.8F, 32.62F));
lpf.Add(new PointF(99.3F, 147.273F));
lpf.Add(new PointF(7.5F, 1412.2F));
Console.WriteLine();
foreach (PointF p in lpf)
{
Console.WriteLine(p);
}
List<Point> lp = lpf.ConvertAll(new Converter<PointF, Point>(PointFToPoint));
Console.WriteLine();
foreach (Point p in lp)
{
Console.WriteLine(p);
}
}
public static Point PointFToPoint(PointF pf)
{
return new Point(((int)pf.X), ((int)pf.Y));
}
50. Collections
public static void Main()
{
List<PointF> lpf = new List<PointF>();
lpf.Add(new PointF(27.8F, 32.62F));
lpf.Add(new PointF(99.3F, 147.273F));
lpf.Add(new PointF(7.5F, 1412.2F));
Console.WriteLine();
foreach (PointF p in lpf)
{
Console.WriteLine(p);
}
List<Point> lp = lpf.ConvertAll(new Converter<PointF, Point>(PointFToPoint));
Console.WriteLine();
foreach (Point p in lp)
{
Console.WriteLine(p);
}
}
public static Point PointFToPoint(PointF pf)
{
return new Point(((int)pf.X), ((int)pf.Y));
}
51. Collections
public static void Main()
{
List<PointF> lpf = new List<PointF>();
lpf.Add(new PointF(27.8F, 32.62F));
lpf.Add(new PointF(99.3F, 147.273F));
lpf.Add(new PointF(7.5F, 1412.2F));
Console.WriteLine();
foreach (PointF p in lpf)
{
Console.WriteLine(p);
}
List<Point> lp = lpf.ConvertAll(new Converter<PointF, Point>(PointFToPoint));
Console.WriteLine();
foreach (Point p in lp)
{
Console.WriteLine(p);
}
}
public static Point PointFToPoint(PointF pf)
{
return new Point(((int)pf.X), ((int)pf.Y));
}
52. Collections
public static void Main()
{
List<PointF> lpf = new List<PointF>();
lpf.Add(new PointF(27.8F, 32.62F));
lpf.Add(new PointF(99.3F, 147.273F));
lpf.Add(new PointF(7.5F, 1412.2F));
Console.WriteLine();
foreach (PointF p in lpf)
{
Console.WriteLine(p);
}
List<Point> lp = lpf.ConvertAll(new Converter<PointF, Point>(PointFToPoint));
Console.WriteLine();
foreach (Point p in lp)
{
Console.WriteLine(p);
}
}
public static Point PointFToPoint(PointF pf)
{
return new Point(((int)pf.X), ((int)pf.Y));
}
53. Collections
public static void Main()
{
List<PointF> lpf = new List<PointF>();
lpf.Add(new PointF(27.8F, 32.62F));
lpf.Add(new PointF(99.3F, 147.273F));
lpf.Add(new PointF(7.5F, 1412.2F));
Console.WriteLine();
foreach (PointF p in lpf)
{
Console.WriteLine(p);
}
List<Point> lp = lpf.ConvertAll(new Converter<PointF, Point>(PointFToPoint));
Console.WriteLine();
foreach (Point p in lp)
{
Console.WriteLine(p);
}
}
public static Point PointFToPoint(PointF pf)
{
return new Point(((int)pf.X), ((int)pf.Y));
}
{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}
{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
55. Collections
string[] names =
{ "Hartono, Tommy", "Adams, Terry", "Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
Random random = new Random(DateTime.Now.Millisecond);
string name = names.ElementAt(random.Next(0, names.Length));
Console.WriteLine("The name chosen at random is '{0}'.", name);
56. Collections
string[] names =
{ "Hartono, Tommy", "Adams, Terry", "Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
Random random = new Random(DateTime.Now.Millisecond);
string name = names.ElementAt(random.Next(0, names.Length));
Console.WriteLine("The name chosen at random is '{0}'.", name);
57. Collections
string[] names =
{ "Hartono, Tommy", "Adams, Terry", "Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
Random random = new Random(DateTime.Now.Millisecond);
string name = names.ElementAt(random.Next(0, names.Length));
Console.WriteLine("The name chosen at random is '{0}'.", name);
58. Collections
string[] names =
{ "Hartono, Tommy", "Adams, Terry", "Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
Random random = new Random(DateTime.Now.Millisecond);
string name = names.ElementAt(random.Next(0, names.Length));
Console.WriteLine("The name chosen at random is '{0}'.", name);
59. Collections
string[] names =
{ "Hartono, Tommy", "Adams, Terry", "Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
Random random = new Random(DateTime.Now.Millisecond);
string name = names.ElementAt(random.Next(0, names.Length));
Console.WriteLine("The name chosen at random is '{0}'.", name);
60. Collections
string[] names =
{ "Hartono, Tommy", "Adams, Terry", "Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
Random random = new Random(DateTime.Now.Millisecond);
string name = names.ElementAt(random.Next(0, names.Length));
Console.WriteLine("The name chosen at random is '{0}'.", name);
61. Collections
string[] names =
{ "Hartono, Tommy", "Adams, Terry", "Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
Random random = new Random(DateTime.Now.Millisecond);
string name = names.ElementAt(random.Next(0, names.Length));
Console.WriteLine("The name chosen at random is '{0}'.", name);
The name chosen at random is 'Ito, Shu'.
70. Collections
1: public sealed class Employee
2: {
3: public long Id { get; set; }
4: public string Name { get; set; }
5: public double Salary { get; set; }
6: }
1: // empty
2: var noEmployeeList = new List<Employee>();
3:
4: // many items
5: var employees = new List<Employee>
6: {
7: new Employee { Id = 1, Name = "Jim Smith", Salary = 12345.50 },
8: new Employee { Id = 7, Name = "Jane Doe", Salary = 31234.50 },
9: new Employee { Id = 9, Name = "John Doe", Salary = 13923.99 },
10: new Employee { Id = 13, Name = "Jim Smith", Salary = 30123.49 },
11: //... etc...
12: };
71. Collections
1: public sealed class Employee
2: {
3: public long Id { get; set; }
4: public string Name { get; set; }
5: public double Salary { get; set; }
6: }
1: // empty
2: var noEmployeeList = new List<Employee>();
3:
4: // many items
5: var employees = new List<Employee>
6: {
7: new Employee { Id = 1, Name = "Jim Smith", Salary = 12345.50 },
8: new Employee { Id = 7, Name = "Jane Doe", Salary = 31234.50 },
9: new Employee { Id = 9, Name = "John Doe", Salary = 13923.99 },
10: new Employee { Id = 13, Name = "Jim Smith", Salary = 30123.49 },
11: //... etc...
12: };
A sealed class cannot be inherited. It is an error to use a
sealed class as a base class. Use the sealed modifier in a class
declaration to prevent inheritance of the class. It is not permitted
to use the abstract modifier with a sealed class. Structs are
implicitly sealed; therefore, they cannot be inherited
72. Collections
• Like First(), the Last() method will throw if there are no items (or no matches in the
case of predicates) in the enumerable:
• The LastOrDefault() methods will return a default(TSource) if the list is empty or
no matches are found:
1: // throws at runtime because empty enumerable.
2: var empty = noEmployeeList.Last();
3:
4: // this line will throw at runtime because there is no item that matches
5: // even though the enumerable itself is not empty
6: var noMatch = employees.Last(e => e.Id == 20);
1: // returns default(Employee) -- null -- because list is empty
2: var empty = noEmployeeList.LastOrDefault();
3:
4: // returns default(Employee) -- null -- because no item matches predicate.
5: var noMatch = employees.Last(e => e.Id == 20);
73. Collections
• ElementAt()
1:
2: // returns the second employee (index == 1) which is Jane Doe, Id == 7
3: var janeDoe = employees.ElementAt(1);
4:
5: // since there's not 30 employees, this one will throw exception
6: var willThrow = employees.ElementAt(30);
7:
8: // returns null because there aren't 30 employees, but we used the OrDefault flavor.
9: var noMatch = employees.ElementAtOrDefault(30);
74. Collections
• Stack
public class SamplesStack
{
public static void Main()
{
// Creates and initializes a new Stack.
Stack myStack = new Stack();
myStack.Push("Hello");
myStack.Push("World");
myStack.Push("!");
// Displays the properties and values of the Stack.
Console.WriteLine("myStack");
Console.WriteLine("tCount: {0}", myStack.Count);
Console.Write("tValues:");
PrintValues(myStack);
}
public static void PrintValues(IEnumerable myCollection)
{
foreach (Object obj in myCollection)
Console.Write(" {0}", obj);
Console.WriteLine();
}
}
75. Collections
• Stack
public class SamplesStack
{
public static void Main()
{
// Creates and initializes a new Stack.
Stack myStack = new Stack();
myStack.Push("Hello");
myStack.Push("World");
myStack.Push("!");
// Displays the properties and values of the Stack.
Console.WriteLine("myStack");
Console.WriteLine("tCount: {0}", myStack.Count);
Console.Write("tValues:");
PrintValues(myStack);
}
public static void PrintValues(IEnumerable myCollection)
{
foreach (Object obj in myCollection)
Console.Write(" {0}", obj);
Console.WriteLine();
}
}
myStack
Count: 3
Values: ! World Hello
Press any key to continue...
77. More Collections Functionalities
• Let’s have the following class
public class PointClass
{
public float XLocation { set; get; }
public float YLocation { set; get; }
public PointClass(float xLocation, float yLocation)
{
this.XLocation = xLocation;
this.YLocation = yLocation;
}
public override string ToString()
{
return String.Format("X = {0}, Y = {1}", this.XLocation, this.YLocation);
}
}
78. More Collections Functionalities
public class IsTest
{
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
PrintToConsole(listOfPoints, "Before Sorting");
listOfPoints.Sort();
PrintToConsole(listOfPoints, "After default sorting");
}
}
80. More Collections Functionalities
public class IsTest
{
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
PrintToConsole(listOfPoints, "Before Sorting");
listOfPoints.Sort();
PrintToConsole(listOfPoints, "After default sorting");
}
}
83. More Collections Functionalities
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static int SortByXLocation(PointClass point1, PointClass point2)
{
if (point1.XLocation > point2.XLocation)
return +1;
else if (point1.XLocation < point2.XLocation)
return -1;
else
return 0;
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
PrintToConsole(listOfPoints, "Before sorting");
listOfPoints.Sort(SortByXLocation);
PrintToConsole(listOfPoints, "After our cool sorting!");
}
84. More Collections Functionalities
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static int SortByXLocation(PointClass point1, PointClass point2)
{
if (point1.XLocation > point2.XLocation)
return +1;
else if (point1.XLocation < point2.XLocation)
return -1;
else
return 0;
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
PrintToConsole(listOfPoints, "Before sorting");
listOfPoints.Sort(SortByXLocation);
PrintToConsole(listOfPoints, "After our cool sorting!");
}
85. More Collections Functionalities
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static int SortByXLocation(PointClass point1, PointClass point2)
{
if (point1.XLocation > point2.XLocation)
return +1;
else if (point1.XLocation < point2.XLocation)
return -1;
else
return 0;
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
PrintToConsole(listOfPoints, "Before sorting");
listOfPoints.Sort(SortByXLocation);
PrintToConsole(listOfPoints, "After our cool sorting!");
}
Before sorting
X = 1, Y = 0
X = 1, Y = 0
X = 2, Y = 0
X = 0, Y = 0
After our cool sorting!
X = 0, Y = 0
X = 1, Y = 0
X = 1, Y = 0
X = 2, Y = 0
Press any key to continue...
86. More Collections Functionalities
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static int SortByXLocation(PointClass point1, PointClass point2)
{
if (point1.XLocation > point2.XLocation)
return +1;
else if (point1.XLocation < point2.XLocation)
return -1;
else
return 0;
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
PrintToConsole(listOfPoints, "Before sorting");
listOfPoints.Sort(SortByXLocation);
PrintToConsole(listOfPoints, "After our cool sorting!");
}
Before sorting
X = 1, Y = 0
X = 1, Y = 0
X = 2, Y = 0
X = 0, Y = 0
After our cool sorting!
X = 0, Y = 0
X = 1, Y = 0
X = 1, Y = 0
X = 2, Y = 0
Press any key to continue...
90. More Collections Functionalities
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
Console.WriteLine(listOfPoints.Contains(new PointClass(1, 0)));
}
91. More Collections Functionalities
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
Console.WriteLine(listOfPoints.Contains(new PointClass(1, 0)));
}
False
Press any key to continue...
92. More Collections Functionalities
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
Console.WriteLine(listOfPoints.Contains(new PointClass(1, 0)));
}
False
Press any key to continue...
Why?!
93. More Collections Functionalities
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
Console.WriteLine(listOfPoints.Contains(new PointClass(1, 0)));
}
False
Press any key to continue...
Because it’s comparing
References not Values
94. More Collections Functionalities
public static void PrintToConsole(List<PointClass> list, string Msg)
{
Console.WriteLine(Msg);
foreach (var point in list)
{
Console.WriteLine(point.ToString());
}
}
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
Console.WriteLine(listOfPoints.Contains(new PointClass(1, 0)));
}
False
Press any key to continue...
So, what to do to
compare values?!
100. More Collections Functionalities
public class PointClass : IEquatable<PointClass>
{
public float XLocation { set; get; }
public float YLocation { set; get; }
public PointClass(float xLocation, float yLocation)
{
this.XLocation = xLocation;
this.YLocation = yLocation;
}
public override string ToString()
{
return String.Format("X = {0}, Y = {1}", this.XLocation, this.YLocation);
}
public bool Equals(PointClass other)
{
if ((this.XLocation == other.XLocation) && (this.YLocation == other.YLocation))
{
return true;
}
else
{
return false;
}
}
}
101. More Collections Functionalities
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
Console.WriteLine(listOfPoints.Contains(new PointClass(0, 0)));
}
102. More Collections Functionalities
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
Console.WriteLine(listOfPoints.Contains(new PointClass(0, 0)));
}
True
Press any key to continue...
103. More Collections Functionalities
public static void Main()
{
List<PointClass> listOfPoints = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 0),
new PointClass(0, 0)
};
Console.WriteLine(listOfPoints.Contains(new PointClass(0, 0)));
}
True
Press any key to continue...
111. “CROSS” Collections
public static void Main()
{
List<PointClass> listOfHalls = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 3),
};
List<PointClass> listOfLabs = new List<PointClass>()
{
new PointClass(1, 7),
new PointClass(10, 2),
};
Dictionary<string, List<PointClass>> dic = new Dictionary<string, List<PointClass>>();
dic.Add("HallsLocations", listOfHalls);
dic.Add("LabsLocations", listOfLabs);
foreach (PointClass point in dic["LabsLocations"])
{
Console.WriteLine(point);
}
}
112. “CROSS” Collections
public static void Main()
{
List<PointClass> listOfHalls = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 3),
};
List<PointClass> listOfLabs = new List<PointClass>()
{
new PointClass(1, 7),
new PointClass(10, 2),
};
Dictionary<string, List<PointClass>> dic = new Dictionary<string, List<PointClass>>();
dic.Add("HallsLocations", listOfHalls);
dic.Add("LabsLocations", listOfLabs);
foreach (PointClass point in dic["LabsLocations"])
{
Console.WriteLine(point);
}
}
X = 1, Y = 7
X = 10, Y = 2
Press any key to continue...
113. “CROSS” Collections
public static void Main()
{
List<PointClass> listOfHalls = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 3),
};
List<PointClass> listOfLabs = new List<PointClass>()
{
new PointClass(1, 7),
new PointClass(10, 2),
};
Dictionary<string, List<PointClass>> dic = new Dictionary<string, List<PointClass>>();
dic.Add("HallsLocations", listOfHalls);
dic.Add("LabsLocations", listOfLabs);
dic["LabsLocations"].ForEach(PrintMe);
}
private static void PrintMe(PointClass point)
{
Console.WriteLine(point);
}
114. “CROSS” Collections
public static void Main()
{
List<PointClass> listOfHalls = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 3),
};
List<PointClass> listOfLabs = new List<PointClass>()
{
new PointClass(1, 7),
new PointClass(10, 2),
};
Dictionary<string, List<PointClass>> dic = new Dictionary<string, List<PointClass>>();
dic.Add("HallsLocations", listOfHalls);
dic.Add("LabsLocations", listOfLabs);
dic["LabsLocations"].ForEach(PrintMe);
}
private static void PrintMe(PointClass point)
{
Console.WriteLine(point);
}
X = 1, Y = 7
X = 10, Y = 2
Press any key to continue...
118. “CROSS” Collections
public static void Main()
{
List<PointClass> listOfHalls = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 3),
};
List<PointClass> listOfLabs = new List<PointClass>()
{
new PointClass(1, 7),
new PointClass(10, 2),
};
Dictionary<string, List<PointClass>> dic = new Dictionary<string, List<PointClass>>();
dic.Add("HallsLocations", listOfHalls);
dic.Add("LabsLocations", listOfLabs);
dic["LabsLocations"].Add(new PointClass(8,8));
Console.WriteLine(dic["LabsLocations"][2]);
}
119. “CROSS” Collections
public static void Main()
{
List<PointClass> listOfHalls = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 3),
};
List<PointClass> listOfLabs = new List<PointClass>()
{
new PointClass(1, 7),
new PointClass(10, 2),
};
Dictionary<string, List<PointClass>> dic = new Dictionary<string, List<PointClass>>();
dic.Add("HallsLocations", listOfHalls);
dic.Add("LabsLocations", listOfLabs);
dic["LabsLocations"].Add(new PointClass(8,8));
Console.WriteLine(dic["LabsLocations"][2]);
}
120. “CROSS” Collections
public static void Main()
{
List<PointClass> listOfHalls = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 3),
};
List<PointClass> listOfLabs = new List<PointClass>()
{
new PointClass(1, 7),
new PointClass(10, 2),
};
Dictionary<string, List<PointClass>> dic = new Dictionary<string, List<PointClass>>();
dic.Add("HallsLocations", listOfHalls);
dic.Add("LabsLocations", listOfLabs);
dic["LabsLocations"].Add(new PointClass(8,8));
Console.WriteLine(dic["LabsLocations"][2]);
}
X = 8, Y = 8
Press any key to continue...
121. “CROSS” Collections
public static void Main()
{
List<PointClass> listOfHalls = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 3),
};
List<PointClass> listOfLabs = new List<PointClass>()
{
new PointClass(1, 7),
new PointClass(10, 2),
};
Dictionary<string, List<PointClass>> dic = new Dictionary<string, List<PointClass>>();
dic.Add("HallsLocations", listOfHalls);
dic.Add("LabsLocations", listOfLabs);
dic["LabsLocations"].Add(new PointClass(8,8));
Console.WriteLine(dic["LabsLocations"].Last());
}
122. “CROSS” Collections
public static void Main()
{
List<PointClass> listOfHalls = new List<PointClass>()
{
new PointClass(1, 0),
new PointClass(1, 0),
new PointClass(2, 3),
};
List<PointClass> listOfLabs = new List<PointClass>()
{
new PointClass(1, 7),
new PointClass(10, 2),
};
Dictionary<string, List<PointClass>> dic = new Dictionary<string, List<PointClass>>();
dic.Add("HallsLocations", listOfHalls);
dic.Add("LabsLocations", listOfLabs);
dic["LabsLocations"].Add(new PointClass(8,8));
Console.WriteLine(dic["LabsLocations"].Last());
}
X = 8, Y = 8
Press any key to continue...