Guest User

Untitled

a guest
Aug 14th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.07 KB | None | 0 0
  1. Solution to rank positions in my LIST?
  2. class Results
  3. {
  4. public int playerId;
  5. public int score;
  6. public int section;
  7. public int position;
  8. public Results(int _playerId, int _score, int _section)
  9. {
  10. playerId = _playerId;
  11. score = _score;
  12. section = _section;
  13. }
  14. }
  15.  
  16. public void RankMyResults()
  17. {
  18. List<Results> myResultList = new List<Results>();
  19.  
  20. myResultList.Add(new Results(1,232, 1));
  21. myResultList.Add(new Results(2,213, 1));
  22. // Add a lot of more results
  23.  
  24. // Iteriate over the items to set the position
  25. }
  26.  
  27. Position Score PlayerId Section
  28.  
  29. 1 135 23 1
  30.  
  31. 1 135 43 1
  32.  
  33. 3 131 45 1
  34.  
  35. #region RankBy
  36.  
  37. public static IEnumerable<TResult> RankBy<TSource, TKey, TResult>(
  38. this IEnumerable<TSource> source,
  39. Func<TSource, TKey> keySelector,
  40. Func<TSource, int, TResult> resultSelector)
  41. {
  42. return source.RankBy(keySelector, null, false, resultSelector);
  43. }
  44.  
  45. public static IEnumerable<TResult> RankBy<TSource, TKey, TResult>(
  46. this IEnumerable<TSource> source,
  47. Func<TSource, TKey> keySelector,
  48. IComparer<TKey> comparer,
  49. Func<TSource, int, TResult> resultSelector)
  50. {
  51. return source.RankBy(keySelector, comparer, false, resultSelector);
  52. }
  53.  
  54. public static IEnumerable<TResult> RankByDescending<TSource, TKey, TResult>(
  55. this IEnumerable<TSource> source,
  56. Func<TSource, TKey> keySelector,
  57. IComparer<TKey> comparer,
  58. Func<TSource, int, TResult> resultSelector)
  59. {
  60. return source.RankBy(keySelector, comparer, true, resultSelector);
  61. }
  62.  
  63. public static IEnumerable<TResult> RankByDescending<TSource, TKey, TResult>(
  64. this IEnumerable<TSource> source,
  65. Func<TSource, TKey> keySelector,
  66. Func<TSource, int, TResult> resultSelector)
  67. {
  68. return source.RankBy(keySelector, null, true, resultSelector);
  69. }
  70.  
  71. private static IEnumerable<TResult> RankBy<TSource, TKey, TResult>(
  72. this IEnumerable<TSource> source,
  73. Func<TSource, TKey> keySelector,
  74. IComparer<TKey> comparer,
  75. bool descending,
  76. Func<TSource, int, TResult> resultSelector)
  77. {
  78. comparer = comparer ?? Comparer<TKey>.Default;
  79.  
  80. var grouped = source.GroupBy(keySelector);
  81. var ordered =
  82. descending
  83. ? grouped.OrderByDescending(g => g.Key, comparer)
  84. : grouped.OrderBy(g => g.Key, comparer);
  85.  
  86. int totalRank = 1;
  87. foreach (var group in ordered)
  88. {
  89. int rank = totalRank;
  90. foreach (var item in group)
  91. {
  92. yield return resultSelector(item, rank);
  93. totalRank++;
  94. }
  95. }
  96. }
  97.  
  98. #endregion
  99.  
  100. #region DenseRankBy
  101.  
  102. public static IEnumerable<TResult> DenseRankBy<TSource, TKey, TResult>(
  103. this IEnumerable<TSource> source,
  104. Func<TSource, TKey> keySelector,
  105. Func<TSource, int, TResult> resultSelector)
  106. {
  107. return source.DenseRankBy(keySelector, null, false, resultSelector);
  108. }
  109.  
  110. public static IEnumerable<TResult> DenseRankBy<TSource, TKey, TResult>(
  111. this IEnumerable<TSource> source,
  112. Func<TSource, TKey> keySelector,
  113. IComparer<TKey> comparer,
  114. Func<TSource, int, TResult> resultSelector)
  115. {
  116. return source.DenseRankBy(keySelector, comparer, false, resultSelector);
  117. }
  118.  
  119. public static IEnumerable<TResult> DenseRankByDescending<TSource, TKey, TResult>(
  120. this IEnumerable<TSource> source,
  121. Func<TSource, TKey> keySelector,
  122. IComparer<TKey> comparer,
  123. Func<TSource, int, TResult> resultSelector)
  124. {
  125. return source.DenseRankBy(keySelector, comparer, true, resultSelector);
  126. }
  127.  
  128. public static IEnumerable<TResult> DenseRankByDescending<TSource, TKey, TResult>(
  129. this IEnumerable<TSource> source,
  130. Func<TSource, TKey> keySelector,
  131. Func<TSource, int, TResult> resultSelector)
  132. {
  133. return source.DenseRankBy(keySelector, null, true, resultSelector);
  134. }
  135.  
  136. private static IEnumerable<TResult> DenseRankBy<TSource, TKey, TResult>(
  137. this IEnumerable<TSource> source,
  138. Func<TSource, TKey> keySelector,
  139. IComparer<TKey> comparer,
  140. bool descending,
  141. Func<TSource, int, TResult> resultSelector)
  142. {
  143. comparer = comparer ?? Comparer<TKey>.Default;
  144.  
  145. var grouped = source.GroupBy(keySelector);
  146. var ordered =
  147. descending
  148. ? grouped.OrderByDescending(g => g.Key, comparer)
  149. : grouped.OrderBy(g => g.Key, comparer);
  150.  
  151. int rank = 1;
  152. foreach (var group in ordered)
  153. {
  154. foreach (var item in group)
  155. {
  156. yield return resultSelector(item, rank);
  157. }
  158. rank++;
  159. }
  160. }
  161.  
  162. #endregion
  163.  
  164. var rankedPlayers = players.RankByDescending(
  165. p => p.Score,
  166. (p, r) => new { Rank = r, Player = p });
Add Comment
Please, Sign In to add comment