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}