Guest User

Untitled

a guest
Aug 20th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.20 KB | None | 0 0
  1. Convert list to number range string
  2. 1,3,5,6,7,8,9,10,12:
  3.  
  4. 1,3,5-10,12
  5.  
  6. static string numListToRangeStr(List<int> numList)
  7. {
  8. StringBuilder retString = new StringBuilder();
  9. numList.Sort();
  10.  
  11. bool inRangeFind = false;
  12. int firstInRange = numList[0];
  13. int lastNumber = firstInRange;
  14. bool first = true;
  15.  
  16. for (int i = 1; i < numList.Count; i++)
  17. {
  18. if (numList[i] == (lastNumber + 1))
  19. {
  20. inRangeFind = true;
  21. }
  22. else
  23. {
  24. if (inRangeFind)
  25. {
  26. if (!first)
  27. {
  28. retString.Append(",");
  29. }
  30. retString.Append(firstInRange);
  31. retString.Append("-");
  32. }
  33. else
  34. {
  35. if (!first)
  36. {
  37. retString.Append(",");
  38. }
  39. }
  40.  
  41. retString.Append(lastNumber);
  42.  
  43. firstInRange = numList[i];
  44. inRangeFind = false;
  45. first = false;
  46. }
  47.  
  48. lastNumber = numList[i];
  49. }
  50.  
  51.  
  52. if (inRangeFind)
  53. {
  54. if (!first)
  55. {
  56. retString.Append(",");
  57. }
  58. retString.Append(firstInRange);
  59. retString.Append("-");
  60. }
  61. else
  62. {
  63. if (!first)
  64. {
  65. retString.Append(",");
  66. }
  67. }
  68. retString.Append(lastNumber);
  69.  
  70. return retString.ToString();
  71. }
  72.  
  73. using System;
  74. using System.Collections.Generic;
  75. using System.Linq;
  76. using System.Text;
  77.  
  78. namespace ConsoleApplication37 {
  79. public static class Program {
  80. static void Main(string[] args) {
  81. var numList=new[] {1, 3, 5, 6, 7, 8, 9, 10, 12};
  82. Console.WriteLine(numListToPossiblyDegenerateRanges(numList).Select(r => PrettyRange(r)).Intersperse(","));
  83. }
  84.  
  85. /// <summary>
  86. /// e.g. 1,3,5,6,7,8,9,10,12
  87. /// becomes
  88. /// (1,1),(3,3),(5,10),(12,12)
  89. /// </summary>
  90. public static IEnumerable<Tuple<int,int>> numListToPossiblyDegenerateRanges(IEnumerable<int> numList) {
  91. Tuple<int, int> currentRange=null;
  92. foreach(var num in numList) {
  93. if(currentRange==null) {
  94. currentRange=Tuple.Create(num, num);
  95. } else if(currentRange.Item2==num-1) {
  96. currentRange=Tuple.Create(currentRange.Item1, num);
  97. } else {
  98. yield return currentRange;
  99. currentRange=Tuple.Create(num, num);
  100. }
  101. }
  102. if(currentRange!=null) {
  103. yield return currentRange;
  104. }
  105. }
  106.  
  107. /// <summary>
  108. /// e.g. (1,1) becomes "1"
  109. /// (1,3) becomes "1-3"
  110. /// </summary>
  111. /// <param name="range"></param>
  112. /// <returns></returns>
  113. public static string PrettyRange(Tuple<int,int> range) {
  114. if(range.Item1==range.Item2) {
  115. return range.Item1.ToString();
  116. }
  117. return string.Format("{0}-{1}", range.Item1, range.Item2);
  118. }
  119.  
  120. public static string Intersperse(this IEnumerable<string> items, string interspersand) {
  121. var currentInterspersand="";
  122. var result=new StringBuilder();
  123. foreach(var item in items) {
  124. result.Append(currentInterspersand);
  125. result.Append(item);
  126. currentInterspersand=interspersand;
  127. }
  128. return result.ToString();
  129. }
  130. }
  131. }
  132.  
  133. string s = "1,2,3,4,5,7,8,9,10,11,12,13";
  134. string[] ints = s.Split(',');
  135. StringBuilder result = new StringBuilder();
  136.  
  137. int num, last = -1;
  138. bool dash = false;
  139.  
  140. for (int ii = 0; ii < ints.Length; ii++)
  141. {
  142. num = Int32.Parse(ints[ii]);
  143.  
  144. if (num - last > 1)
  145. {
  146. if (dash)
  147. {
  148. result.Append(last);
  149. dash = false;
  150. }
  151. if (result.Length > 0)
  152. {
  153. result.Append(",");
  154. }
  155. result.Append(num);
  156. }
  157. else
  158. {
  159. if (dash == false)
  160. {
  161. result.Append("-");
  162. dash = true;
  163. }
  164. }
  165.  
  166. last = num;
  167.  
  168. if (dash && ii == ints.Length - 1)
  169. {
  170. result.Append(num);
  171. }
  172. }
  173.  
  174. Console.WriteLine(result);
Add Comment
Please, Sign In to add comment