如何检查连续重复的数字C#

时间:2016-03-11 21:21:39

标签: c# string

我是C#的新手,而且我试图完成这个我有这个字符串

  

15556677889

我需要它像这样

  

132221

所以基本上计算一个数字重复的次数,然后用它们生成一个字符串。 任何帮助将不胜感激。

修改 只有当它们是连续的时才

  

22211222

将是

  

323

1 个答案:

答案 0 :(得分:5)

尽管有一些遗漏的问题(例如,15556677889111111的输出是什么),我会用linq编写

var output = string.Concat("15556677889".GroupBy(x => x).Select(x => x.Count()));

输出:132221

修改

编辑完成后,我会写一个像这样的扩展方法:

public static IEnumerable<IEnumerable<T>> GroupSequenceWhile<T>(this   IEnumerable<T> seq, Func<T, T, bool> condition) 
{
    List<T> list = new List<T>();
    using (var en = seq.GetEnumerator())
    {
        if (en.MoveNext())
        {
            var prev = en.Current;
            list.Add(en.Current);

            while (en.MoveNext())
            {
                if (condition(prev, en.Current))
                {
                    list.Add(en.Current);
                }
                else
                {
                    yield return list;
                    list = new List<T>();
                    list.Add(en.Current);
                }
                prev = en.Current;
            }

            if (list.Any())
                yield return list;
        }
    }
}

用法相同

var output = string.Concat("15556677889"
                           .GroupSequenceWhile((c1,c2)=>c1==c2)
                           .Select(x => x.Count()));