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

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

有没有一个很好的function方法来检查数组是否是顺序的? 我可以使用以下代码执行此操作:

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

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

试试这个:

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

使用Linq:

  public static bool IsSequential(int[] a) { return Enumerable.Range(1, a.Length - 1).All(i => a[i] - 1 == a[i - 1]); } 

对于所有顺序的非顺序数据,这应该可以解决问题。 带有示例输入的完整示例。 经过测试并且工作正常

 var list = new List(new[] { 7, 6, 5, 4, 3,9}); int minValue = list.Min(); int maxValue = list.Count; List test = Enumerable.Range(minValue, maxValue).ToList(); var result = Enumerable.Range(minValue, maxValue).Except(list); if (result.ToList().Count == 0) { Console.WriteLine("numbers are in sequence"); } else { Console.WriteLine("Numbers are not in sequence"); } 

我不知道它是否真的是一个改进/更好,但你可以使用Range。

 ENumerable.Range(0, myArray.Length).Any(i => myArray[i] != myArray[0] + i) 

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

 var result = Enumerable.Range(array[0], array[array.Length-1]).Except(array.ToList()); 

同样如下: 确保数组在C#中是顺序的

在那里回答:

如果您确定数组已排序且没有重复项 ,则可以检查:

 array[array.Length - 1] == array[0] + array.Length - 1 

首先对数组进行排序,使用distinct()删除N类(例如对),如果数组长度总是== 5,那么你需要做的就是if((array [4] – array [0])== 4)返回true。

如果它的德州扑克或者如果你需要同时考虑高牌和低牌直道,它会变得更加复杂。