如何概述格式编号字符串: 字符串输入:
Car2Bike4Ship3Bike6Car9Ship8Car7Car2
这是我的输出字符串:
Car : 2+9+7+2
Bike : 4+6
Ship : 3+8
我的代码:
String source = “Car2Bike4Ship3Bike6Car9Ship8Car7Car2”;
var result = Regex
.Matches(source, @"(?<name>[A-z_[ạảàáãăắẳằặẵâấẩầậẫóỏòọõôốổồộỗơớởờợỡéèẻẹẽêếềểệễúùủụũưứừửựữíìỉịĩýỳỷỵỹđ_ẠẢÀÁÃĂẮẲẰẶẴÂẤẨẦẬẪÓỎÒỌÕÔỐỔỒỘỖƠỚỞỜỢỠÉÈẺẸẼÊẾỀỂỆỄÚÙỦỤŨƯỨỪỬỰỮÍÌỈỊĨÝỲỶỴỸĐ_a-z]+)(?<size>([0-9]+\.[0-9])|([0-9]+))")
.OfType<Match>()
.Select(match => new
{
name = match.Groups["name"].Value,
size = double.Parse(match.Groups["size"].Value),
})
.GroupBy(value => value.name)
.Select(chunk => String.Format("{0}: {1}",
chunk.Key, String.Join(" + ", chunk.Select(item => item.size))));
String report = String.Join(Environment.NewLine, result);
report = report.Replace(": 0", ":");
report = report.Replace(": +", ":");
txbkqvl.Text = Convert.ToString(report);
现在,我希望在这些线上提前一个SUMARY并处理一个特殊项目“CAR”。看起来像:
11 Car :
2 Unit(s) 2
1 Unit(s) 9
1 Unit(s) 7
10 Bike : 4+6
11 Ship : 3+8
我不确定我的代码是否趋势。 非常感谢!!!
答案 0 :(得分:1)
添加总和应该非常简单,例如
.Select(chunk => String.Format("{0} {1}: {2}",
chunk.Sum(item => item.size), chunk.Key, String.Join(" + ", chunk.Select(item => item.size))));
至于特殊处理......老实说,总的来说,我建议将代码分解为易于阅读的步骤并从那里开始工作。你的那种&#34; guru代码&#34;非常紧凑,但难以理解和修改。
首先将数据解析为简单对象,然后按照所需的步骤处理这些对象。在一个巨大的LINQ链中做所有事情并不总是最好的做法。