main
1using System.Collections.Generic;
2
3namespace MoMoney.Domain.Core
4{
5 public interface IRanking<T> : IComparer<T>
6 {
7 void add(T item);
8 }
9
10 public class Ranking<T> : IRanking<T>
11 {
12 readonly IList<T> ranked_items;
13
14 public Ranking()
15 {
16 ranked_items = new List<T>();
17 }
18
19 public void add(T item)
20 {
21 ranked_items.Add(item);
22 }
23
24 public int Compare(T x, T y)
25 {
26 var x_ranking = get_ranking_for(x);
27 var y_ranking = get_ranking_for(y);
28 if (x_ranking.Equals(y_ranking)) return 0;
29 return x_ranking < y_ranking ? 1 : -1;
30 }
31
32 int get_ranking_for(T item)
33 {
34 return ranked_items.IndexOf(item) == -1 ? int.MaxValue : ranked_items.IndexOf(item);
35 }
36 }
37}