-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
122 lines (112 loc) · 3.25 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using Strategy_Pattern_Using_different_shipping_providers.Business.Models;
using System;
using System.Collections.Generic;
namespace Strategy_Pattern_Using_different_shipping_providers
{
class Program
{
static void Main(string[] args)
{
var orders = new[] {
new Order
{
ShippingDetails = new ShippingDetails
{
OriginCountry = "Sweden"
}
},
new Order
{
ShippingDetails = new ShippingDetails
{
OriginCountry = "USA"
}
},
new Order
{
ShippingDetails = new ShippingDetails
{
OriginCountry = "Sweden"
}
},
new Order
{
ShippingDetails = new ShippingDetails
{
OriginCountry = "USA"
}
},
new Order
{
ShippingDetails = new ShippingDetails
{
OriginCountry = "Singapore"
}
}
};
Print(orders);
Console.WriteLine();
Console.WriteLine("Sorting..");
Console.WriteLine();
/// TODO: Sort array with strategies implementing IComparer<T>
Array.Sort(orders, new OrderAmountComparer());
Console.WriteLine("Sorted based on order amount");
Console.WriteLine();
Print(orders);
Console.WriteLine();
Array.Sort(orders, new OrderOriginComparer());
Console.WriteLine("Sorted based on origin");
Console.WriteLine();
Print(orders);
}
static void Print(IEnumerable<Order> orders)
{
foreach (var order in orders)
{
Console.WriteLine(order.ShippingDetails.OriginCountry);
}
}
}
#region Strategies
/// <summary>
/// Sorts order based on Amount
/// </summary>
public class OrderAmountComparer : IComparer<Order>
{
public int Compare(Order x, Order y)
{
var xTotal = x.TotalPrice;
var yTotal = y.TotalPrice;
if (xTotal == yTotal)
{
return 0;
}
else if (xTotal > yTotal)
{
return 1;
}
return -1;
}
}
/// <summary>
/// Sorts orders based on Country of Origin
/// </summary>
public class OrderOriginComparer : IComparer<Order>
{
public int Compare(Order x, Order y)
{
var xDest = x.ShippingDetails.OriginCountry.ToLowerInvariant();
var yDest = y.ShippingDetails.OriginCountry.ToLowerInvariant();
if (xDest == yDest)
{
return 0;
}
else if(xDest[0] > yDest[0])
{
return 1;
}
return -1;
}
}
#endregion
}