Free cookie consent management tool by TermsFeed Policy Generator

source: stable/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.1.1/SimSharp-3.1.1/Collections/Extensions.cs @ 17181

Last change on this file since 17181 was 17181, checked in by swagner, 5 years ago

#2875: Merged r17180 from trunk to stable

File size: 1.7 KB
Line 
1#region License Information
2/* SimSharp - A .NET port of SimPy, discrete event simulation framework
3Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4
5This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation, either version 3 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
17#endregion
18
19using System;
20using System.Collections.Generic;
21using System.Linq;
22
23namespace SimSharp {
24  public static class Extensions {
25    public static IEnumerable<T> MaxItems<T>(this IEnumerable<T> source, Func<T, IComparable> selector) {
26      var enumerator = source.GetEnumerator();
27      if (!enumerator.MoveNext()) return Enumerable.Empty<T>();
28      var item = enumerator.Current;
29      var max = selector(item);
30      var result = new List<T> { item };
31     
32      while (enumerator.MoveNext()) {
33        item = enumerator.Current;
34        var comparable = selector(item);
35        var comparison = comparable.CompareTo(max);
36        if (comparison > 0) {
37          result.Clear();
38          result.Add(item);
39          max = comparable;
40        } else if (comparison == 0) {
41          result.Add(item);
42        }
43      }
44      return result;
45    }
46  }
47}
Note: See TracBrowser for help on using the repository browser.