检查数字数组是否是连续的功能方法

Axa*_*dax 13 .net c# c#-3.0

假设当每个成功元素具有前一个元素的值时,数组是顺序的+ 1.假设我有一个数字数组,如{5,6,7,8}(顺序)或{1,2,5}(非顺序).

有没有一个很好的功能方法来检查数组是否是顺序的?我可以用以下代码完成:

bool IsSequential(int[] array)
{
    for (int i = 1; i < array.Length; i++)
       if (array[i] != array[i - 1] + 1)
            return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我正试图确定扑克牌是否笔直.

Kam*_*ski 15

试试这个:

    bool IsSequential(int[] array)
    {
        return array.Zip(array.Skip(1), (a, b) => (a + 1) == b).All(x => x);
    }
Run Code Online (Sandbox Code Playgroud)

  • 只是要添加,如果int数组未按顺序排列,这将不起作用。例如,这将与`[4,5,6]`一起工作,而不与`[5,4,6]`一起工作。您可以只使用`array.OrderBy(a =&gt; a).Zip(array.Skip(1),(a,b)=&gt;(a + 1)== b).All(x =&gt; x);`让后者工作。 (2认同)

Ser*_*rge 5

我不知道这是否真的是改进/更好,但您可以使用 Range。

ENumerable.Range(0, myArray.Length).Any(i => myArray[i] != myArray[0] + i)
Run Code Online (Sandbox Code Playgroud)

如果数组不包含序列号,则返回 true。

  • 很好,不过如果我们想检查一个数组是否是连续的:`Enumerable.Range(0, myArray.Length).All(i =&gt; myArray[i] == myArray[0] + i)` (2认同)