首页 > 解决方案 > C# 中的数组大小(长度)计数

问题描述

我想将最后一个零计数到下一个零的长度(在最后一个零和下一个零之间),例如:

int[] Array1 = {0,0,1,4,3,1,0,0,0};
int[] Array2 = {0,0,0,0,0,2,5,3,2,1,0,0,0,0,0,0,1,2,5,3,3,2,0,0,0,0};

愿望结果:

数组 1:4(从数组 1[2] -> 数组 1[5])

Array2: 5 (从 array1[5] -> array1[9]) & 6 (从 array1[16] -> array1[21])

对于array2,我想得到 5 & 6。

如何确定以下示例的 C# 中特殊数组的大小(长度/项目数)?

标签: c#arrays

解决方案


这可以很好地处理数组 2 的 5 和 6 :

public IEnumerable<int> CountNonzeroSequences(IEnumerable<int> input)
{
    int count = 0;
    foreach(var item in input)
    {
        if (item != 0) count++;
        else
        {
           if (count > 0) yield return count;
           count = 0;
        }
    }
    if (count > 0) yield return count;
}

你可以像这样使用它:

int[] arr1 = {0,0,1,4,3,1,0,0,0};
int[] arr2 = {0,0,0,0,0,2,5,3,2,1,0,0,0,0,0,0,1,2,5,3,3,2,0,0,0,0};

foreach(var result in CountNonzeroSequences(arr1)) 
{
    Console.WriteLine(result);
}
Console.WriteLine();
foreach(var result in CountNonzeroSequences(arr2)) 
{
    Console.WriteLine(result);
}

推荐阅读