Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/20/10 17:37:53 (14 years ago)
Author:
mkommend
Message:

added RowComparer for RunCollectionTabularView (ticket #970)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionTabularView.cs

    r3423 r3447  
    3131using HeuristicLab.Data.Views;
    3232using HeuristicLab.Collections;
     33using HeuristicLab.Core;
    3334
    3435namespace HeuristicLab.Optimization.Views {
     
    6869      }
    6970    }
     71
     72
     73    protected override int[] Sort(IEnumerable<KeyValuePair<int, SortOrder>> sortedColumns) {
     74      int[] newSortedIndex = Enumerable.Range(0, Content.Count).ToArray();
     75      RunCollectionRowComparer rowComparer = new RunCollectionRowComparer();
     76      if (sortedColumns.Count() != 0) {
     77        rowComparer.SortedIndizes = sortedColumns;
     78        rowComparer.Matrix = Content;
     79        Array.Sort(newSortedIndex, rowComparer);
     80      }
     81      return newSortedIndex;
     82    }
     83
     84    public class RunCollectionRowComparer : IComparer<int> {
     85      public RunCollectionRowComparer() {
     86      }
     87
     88      private List<KeyValuePair<int, SortOrder>> sortedIndizes;
     89      public IEnumerable<KeyValuePair<int, SortOrder>> SortedIndizes {
     90        get { return this.sortedIndizes; }
     91        set { sortedIndizes = new List<KeyValuePair<int, SortOrder>>(value); }
     92      }
     93      private RunCollection matrix;
     94      public RunCollection Matrix {
     95        get { return this.matrix; }
     96        set { this.matrix = value; }
     97      }
     98
     99      public int Compare(int x, int y) {
     100        int result = 0;
     101        IItem value1, value2;
     102        IComparable comparable1, comparable2;
     103
     104        if (matrix == null)
     105          throw new InvalidOperationException("Could not sort IStringConvertibleMatrix if the matrix member is null.");
     106        if (sortedIndizes == null)
     107          return 0;
     108
     109        foreach (KeyValuePair<int, SortOrder> pair in sortedIndizes.Where(p => p.Value != SortOrder.None)) {
     110          value1 = matrix.GetValue(x, pair.Key);
     111          value2 = matrix.GetValue(y, pair.Key);
     112          comparable1 = value1 as IComparable;
     113          comparable2 = value2 as IComparable;
     114          if (comparable1 != null)
     115            result = comparable1.CompareTo(comparable2);
     116          else {
     117            string string1 = value1 != null ? value1.ToString() : string.Empty;
     118            string string2 = value2 != null ? value2.ToString() : string.Empty;
     119            result = string1.CompareTo(string2);
     120          }
     121          if (pair.Value == SortOrder.Descending)
     122            result *= -1;
     123          if (result != 0)
     124            return result;
     125        }
     126        return result;
     127      }
     128    }
    70129  }
    71130}
Note: See TracChangeset for help on using the changeset viewer.