public virtual void Organise(DragablzItemsControl requestor, Size measureBounds, IEnumerable <DragablzItem> items) { if (items == null) { throw new ArgumentNullException("items"); } OrganiseInternal( requestor, measureBounds, items.Select((di, idx) => new Tuple <int, DragablzItem>(idx, di)) .OrderBy(tuple => tuple, MultiComparer <Tuple <int, DragablzItem> > .Ascending(tuple => _getLocation(tuple.Item2)) .ThenAscending(tuple => tuple.Item1)) .Select(tuple => tuple.Item2)); }
public static void Main(string[] args) { List <City> cities = CityDataImporter.LoadData(); // TODO Swap out comparers as desired //IComparer<City> comparer = new PopulationComparer(); MultiComparer multcomp = new MultiComparer(); multcomp.Comparers.Add(new StateComparer()); multcomp.Comparers.Add(new AreaComparer()); cities.Sort(multcomp); PrintCities(cities); Console.ReadLine(); }
public void ShouldCompareByTimeAndValue() { // given var list = new List <TestObj> { new TestObj { Value = 10, Time = new DateTime(2015, 9, 15, 10, 0, 0) }, new TestObj { Value = 7, Time = new DateTime(2015, 9, 15, 11, 0, 0) }, new TestObj { Value = 6, Time = new DateTime(2015, 9, 15, 11, 0, 0) }, new TestObj { Value = 8, Time = new DateTime(2015, 9, 15, 8, 0, 0) }, new TestObj { Value = 3, Time = new DateTime(2015, 9, 15, 15, 0, 0) } }; var comparer = MultiComparer.Of( new TimeComparer(), new ValueComparer()); // when var sorted = list.SortBy(comparer); // then Check.That(sorted).ContainsExactly( new TestObj { Value = 8, Time = new DateTime(2015, 9, 15, 8, 0, 0) }, new TestObj { Value = 10, Time = new DateTime(2015, 9, 15, 10, 0, 0) }, new TestObj { Value = 6, Time = new DateTime(2015, 9, 15, 11, 0, 0) }, new TestObj { Value = 7, Time = new DateTime(2015, 9, 15, 11, 0, 0) }, new TestObj { Value = 3, Time = new DateTime(2015, 9, 15, 15, 0, 0) }); }
public void ShouldIgnoreComparationWhenNoComparersSpecified() { // given var list = new List <TestObj> { new TestObj { Value = 10, Time = new DateTime(2015, 9, 15, 10, 0, 0) }, new TestObj { Value = 7, Time = new DateTime(2015, 9, 15, 11, 0, 0) }, new TestObj { Value = 6, Time = new DateTime(2015, 9, 15, 11, 0, 0) }, new TestObj { Value = 8, Time = new DateTime(2015, 9, 15, 8, 0, 0) }, new TestObj { Value = 3, Time = new DateTime(2015, 9, 15, 15, 0, 0) } }; var comparer = MultiComparer.Of <TestObj>(); // when var sorted = list.SortBy(comparer); // then Check.That(sorted).ContainsExactly( new TestObj { Value = 10, Time = new DateTime(2015, 9, 15, 10, 0, 0) }, new TestObj { Value = 7, Time = new DateTime(2015, 9, 15, 11, 0, 0) }, new TestObj { Value = 6, Time = new DateTime(2015, 9, 15, 11, 0, 0) }, new TestObj { Value = 8, Time = new DateTime(2015, 9, 15, 8, 0, 0) }, new TestObj { Value = 3, Time = new DateTime(2015, 9, 15, 15, 0, 0) }); }
public void Organise(Size bounds, IEnumerable <DragablzItem> items) { if (items == null) { throw new ArgumentNullException("items"); } var currentCoord = 0.0; foreach ( var newItem in items.Select((di, idx) => new Tuple <int, DragablzItem>(idx, di)) .OrderBy(tuple => tuple, MultiComparer <Tuple <int, DragablzItem> > .Ascending(tuple => _getLocation(tuple.Item2)) .ThenAscending(tuple => tuple.Item1)) .Select(tuple => tuple.Item2)) { SetLocation(newItem, currentCoord); newItem.Measure(bounds); currentCoord += _getDesiredSize(newItem); } }
public void Update() { if (!ready) { return; } IEnumerable <Ship> baseships = Staff.Current.Homeport.Ships; if (baseships == null) { return; } int[] typeid = ShipTypes.Where(x => x.IsSelected).Select(x => x.ShipType.Id).ToArray(); baseships = baseships.Where(x => typeid.Contains(x.ShipInfo.ShipType.Id)); Filters.ForEach(x => baseships = x.Apply(baseships)); Ship[] sortedships = baseships.ToArray(); MultiComparer <Ship> comparer = new MultiComparer <Ship> { Selectors = Selectors.TakeWhile(x => x.SelectedIndex != 0).Select(x => new Tuple <Func <Ship, int>, bool>(x.Sorter.KeySelector, x.IsDescend)) }; Array.Sort(sortedships, comparer); ShownShips = sortedships.Select(ItemWithIndex <Ship> .Generator).ToArray(); }
public void Organise(Size measureBounds, IEnumerable <DragablzItem> items) { if (items == null) { throw new ArgumentNullException("items"); } var currentCoord = 0.0; var z = int.MaxValue; foreach ( var newItem in items.Select((di, idx) => new Tuple <int, DragablzItem>(idx, di)) .OrderBy(tuple => tuple, MultiComparer <Tuple <int, DragablzItem> > .Ascending(tuple => _getLocation(tuple.Item2)) .ThenAscending(tuple => tuple.Item1)) .Select(tuple => tuple.Item2)) { Panel.SetZIndex(newItem, newItem.IsSelected ? int.MaxValue : --z); SetLocation(newItem, currentCoord); newItem.Measure(measureBounds); currentCoord += _getDesiredSize(newItem) + _itemOffset; } }