返回一个数字包含多少个唯一数字

Amo*_*mod 0 c# loops numbers

我有一串数字,我想计算该字符串包含多少个唯一数字。

例子:

111222
1002345
000000
Run Code Online (Sandbox Code Playgroud)

预期输出:

111222 2
1002345 6
000000 1
Run Code Online (Sandbox Code Playgroud)

我使用以下代码实现了这一点:

111222
1002345
000000
Run Code Online (Sandbox Code Playgroud)

有什么办法可以改进上面的代码吗?我觉得有不必要的循环。

Ran*_*dom 7

不知道它是否符合你对“改进”的定义,但你可以这样做:

str.Where(x => char.IsDigit(x)).GroupBy(x => x).Count();
Run Code Online (Sandbox Code Playgroud)

在这里查看:

https://dotnetfiddle.net/t5OW6T

编辑:

正如评论中所注意到的,您也可以使用Distinctisn 代替GroupBy(x => x)

GroupBy(x => x)如果您想知道digit字符串中出现的频率,这会很有用,可以这样做:

str.Where(x => char.IsDigit(x)).GroupBy(x => x).Select(x => (x.Key, x.Count()))
Run Code Online (Sandbox Code Playgroud)

您不是调用Count“整个”分组结果,而是评估Count分组结果的每个单独组。

您可以在这里找到一个示例:

https://dotnetfiddle.net/D60ygZ

  • 您也可以使用“Distinct()”,而不是对其自身进行分组。`IsDigit` 还考虑 Unicode 数字,即其他书写系统的数字。如果不需要,我们可以从 .NET 7 开始使用“IsAsciiDigit”。 (4认同)