【发布时间】:2020-02-14 17:58:21
【问题描述】:
需要查找一行中每个连续字符的计数。 例如:aaaabbccaa 输出:4a2b2c2a
字符可以重复,但只需要计算连续的字符。我还需要保持原来的顺序。
我尝试了关注,但它对所有字符进行了分组,所以没有用。
str.GroupBy(c => c).Select(g => new { g.Key, Count = g.Count() }).ToList().ForEach(x => str+= x.Count + "" + x.Key)
【问题讨论】:
-
这能回答你的问题吗? Run-length encoding of a given string
-
现在你说你不想使用循环;你能说一下为什么你拒绝使用简单、直接的编程技术来解决你的问题吗?出于某种原因,您似乎想让这个问题变得更难,我不清楚为什么。
-
如果您的问题是“如何诊断性能问题?”然后问那个问题。
-
@Brian:在有限的情况下,正则表达式可以在摊销的情况下获胜,因为一些正则表达式引擎允许您编译您将经常使用的正则表达式,然后生成优化代码以匹配表达。但是你是对的,绝大多数时候,一次性正则表达式会慢得多。也就是说,足够快的定义就是足够快。我们应该通过更多的指标来判断解决方案,而不仅仅是原始速度。
-
一个快速基准测试表明,对于 10,000 个字符的字符串,正则表达式方法比我的(非常通用的)LINQ 扩展方法 (
GroupByRuns) 花费的时间长 1.09 倍,并且比直接的方法慢 12 倍for循环实现,虽然正则表达式可以通过一些小的优化变得更接近一些。