Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Convert list to number range string
- 1,3,5,6,7,8,9,10,12:
- 1,3,5-10,12
- static string numListToRangeStr(List<int> numList)
- {
- StringBuilder retString = new StringBuilder();
- numList.Sort();
- bool inRangeFind = false;
- int firstInRange = numList[0];
- int lastNumber = firstInRange;
- bool first = true;
- for (int i = 1; i < numList.Count; i++)
- {
- if (numList[i] == (lastNumber + 1))
- {
- inRangeFind = true;
- }
- else
- {
- if (inRangeFind)
- {
- if (!first)
- {
- retString.Append(",");
- }
- retString.Append(firstInRange);
- retString.Append("-");
- }
- else
- {
- if (!first)
- {
- retString.Append(",");
- }
- }
- retString.Append(lastNumber);
- firstInRange = numList[i];
- inRangeFind = false;
- first = false;
- }
- lastNumber = numList[i];
- }
- if (inRangeFind)
- {
- if (!first)
- {
- retString.Append(",");
- }
- retString.Append(firstInRange);
- retString.Append("-");
- }
- else
- {
- if (!first)
- {
- retString.Append(",");
- }
- }
- retString.Append(lastNumber);
- return retString.ToString();
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace ConsoleApplication37 {
- public static class Program {
- static void Main(string[] args) {
- var numList=new[] {1, 3, 5, 6, 7, 8, 9, 10, 12};
- Console.WriteLine(numListToPossiblyDegenerateRanges(numList).Select(r => PrettyRange(r)).Intersperse(","));
- }
- /// <summary>
- /// e.g. 1,3,5,6,7,8,9,10,12
- /// becomes
- /// (1,1),(3,3),(5,10),(12,12)
- /// </summary>
- public static IEnumerable<Tuple<int,int>> numListToPossiblyDegenerateRanges(IEnumerable<int> numList) {
- Tuple<int, int> currentRange=null;
- foreach(var num in numList) {
- if(currentRange==null) {
- currentRange=Tuple.Create(num, num);
- } else if(currentRange.Item2==num-1) {
- currentRange=Tuple.Create(currentRange.Item1, num);
- } else {
- yield return currentRange;
- currentRange=Tuple.Create(num, num);
- }
- }
- if(currentRange!=null) {
- yield return currentRange;
- }
- }
- /// <summary>
- /// e.g. (1,1) becomes "1"
- /// (1,3) becomes "1-3"
- /// </summary>
- /// <param name="range"></param>
- /// <returns></returns>
- public static string PrettyRange(Tuple<int,int> range) {
- if(range.Item1==range.Item2) {
- return range.Item1.ToString();
- }
- return string.Format("{0}-{1}", range.Item1, range.Item2);
- }
- public static string Intersperse(this IEnumerable<string> items, string interspersand) {
- var currentInterspersand="";
- var result=new StringBuilder();
- foreach(var item in items) {
- result.Append(currentInterspersand);
- result.Append(item);
- currentInterspersand=interspersand;
- }
- return result.ToString();
- }
- }
- }
- string s = "1,2,3,4,5,7,8,9,10,11,12,13";
- string[] ints = s.Split(',');
- StringBuilder result = new StringBuilder();
- int num, last = -1;
- bool dash = false;
- for (int ii = 0; ii < ints.Length; ii++)
- {
- num = Int32.Parse(ints[ii]);
- if (num - last > 1)
- {
- if (dash)
- {
- result.Append(last);
- dash = false;
- }
- if (result.Length > 0)
- {
- result.Append(",");
- }
- result.Append(num);
- }
- else
- {
- if (dash == false)
- {
- result.Append("-");
- dash = true;
- }
- }
- last = num;
- if (dash && ii == ints.Length - 1)
- {
- result.Append(num);
- }
- }
- Console.WriteLine(result);
Add Comment
Please, Sign In to add comment