计算数组元素子集的最佳方法

时间:2017-11-21 05:24:28

标签: c# arrays

计算字符串中'/'分隔元素的数字元素数量的最佳方法是什么?

例如,在字符串"OL/12/15/NR/17/21"中,我们有4个数字元素。可以在数组中找到的唯一非数字(即alpha)元素是"OL"(离开梯形图)和"NR"(无结果)。

这是我的解决方案,但我怀疑有更好,更有效的算法:

int cnt = 0;
string sampleString = "OL/12/15/NR/17/21";
string[] sampleArray = sampleString.split('/');

foreach (string element in sampleArray)
    if (element != "OL" && element != "NR")
        cnt++;

4 个答案:

答案 0 :(得分:4)

以下是LINQ的替代选项:

string[] sampleArray = sampleString.Split(new Char[]{'/'},StringSplitOptions.RemoveEmptyEntries);
int strCount = sampleArray.Count(x=> x!= "OL" && x != "NR");

这会更短但不能说这个效率很高,Here你可以找到一个可以证明这一点的工作示例:

答案 1 :(得分:3)

使用正则表达式匹配数字:

string sampleString = "OL/12/15/NR/17/21";
int count = Regex.Matches(sampleString,@"\b\d+\b").Count;

答案 2 :(得分:0)

我更喜欢这样的通用方法:

int cnt = 0;
string sampleString = "OL/12/15/NR/17/21";
string[] sampleArray = sampleString.split('/');
int numValue;

foreach (string element in sampleArray)
    if (Int32.TryParse(element , out numValue))
        cnt++;

答案 3 :(得分:0)

你可以使用正则表达式,下面是你的完整代码

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(\d+)";
        string input = @"OL/12/15/NR/17/21";

        foreach (Match m in Regex.Matches(input, pattern))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

输出我的工作代码

  • '12'在索引3处找到。
  • '15'在索引6处找到。
  • '17'在索引12处找到。
  • '21'在索引15处找到。

这是相同的演示:https://regex101.com/r/iI1wQ7/3