Rev | Line | |
---|
[18023] | 1 | #region License Information |
---|
| 2 | /* |
---|
| 3 | * This file is part of SimSharp which is licensed under the MIT license. |
---|
| 4 | * See the LICENSE file in the project root for more information. |
---|
| 5 | */ |
---|
| 6 | #endregion |
---|
| 7 | |
---|
| 8 | using System; |
---|
| 9 | using System.Collections.Generic; |
---|
| 10 | using System.Linq; |
---|
| 11 | |
---|
| 12 | namespace SimSharp { |
---|
| 13 | public static class Extensions { |
---|
| 14 | public static IEnumerable<T> MaxItems<T>(this IEnumerable<T> source, Func<T, IComparable> selector) { |
---|
| 15 | var enumerator = source.GetEnumerator(); |
---|
| 16 | if (!enumerator.MoveNext()) return Enumerable.Empty<T>(); |
---|
| 17 | var item = enumerator.Current; |
---|
| 18 | var max = selector(item); |
---|
| 19 | var result = new List<T> { item }; |
---|
| 20 | |
---|
| 21 | while (enumerator.MoveNext()) { |
---|
| 22 | item = enumerator.Current; |
---|
| 23 | var comparable = selector(item); |
---|
| 24 | var comparison = comparable.CompareTo(max); |
---|
| 25 | if (comparison > 0) { |
---|
| 26 | result.Clear(); |
---|
| 27 | result.Add(item); |
---|
| 28 | max = comparable; |
---|
| 29 | } else if (comparison == 0) { |
---|
| 30 | result.Add(item); |
---|
| 31 | } |
---|
| 32 | } |
---|
| 33 | return result; |
---|
| 34 | } |
---|
| 35 | } |
---|
| 36 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.