我是C#的新手,而且我试图完成这个我有这个字符串
15556677889
我需要它像这样
132221
所以基本上计算一个数字重复的次数,然后用它们生成一个字符串。 任何帮助将不胜感激。
修改 只有当它们是连续的时才
22211222
将是
323
答案 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()));