【发布时间】:2021-11-23 08:40:46
【问题描述】:
我正在寻找一种方法来计算仅某些数字,如果在提供字符串时找不到数字,则减少1。 p>
例如,
string test = "987652349";
如何计算字符串中有多少个9s?如果没有9s,则改为计数8?如果没有,算7?等等。
我有一个复杂 if 循环,看起来不太好看。数字总是从9 开始,一直到1。
for each c in test
if (test.Contains("9")){
count = test.Where(x => x == '9').Count();
blah blah;
}
else if (test.Contains("8")){
count = test.Where(x => x == '8').Count();
blah blah;
}
等等
【问题讨论】:
-
字符总是全是数字吗?
count = test.Count(x => x == test.Max())? -
请用有效的 C# 重写你的“例子”。
-
虽然 LINQ 解决方案是最好的,但您的循环最好写成从
'9'到'0'并在它包含在test中时中断。事实上,正如所写的那样,您的for each(sic) 循环没有任何用处,因为您从未在体内引用c。 -
@JoachimIsaksson 也许两行?
var maxdigit = test.Max(); var countmaxdigit = test.Count(ch => ch == maxdigit); -
@NetMage 是的,linq 解决方案并不完全是最优的,因为它为每个字符运行 test.Max(),分两步执行肯定更好。