假设当每个成功元素具有前一个元素+ 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;
}
我正在试图确定扑克牌是否笔直。
答案 0 :(得分:13)
试试这个:
bool IsSequential(int[] array)
{
return array.Zip(array.Skip(1), (a, b) => (a + 1) == b).All(x => x);
}
答案 1 :(得分:3)
我不知道它是否真的有改进/更好但你可以使用Range。
ENumerable.Range(0, myArray.Length).Any(i => myArray[i] != myArray[0] + i)
如果数组不包含序号,则返回true。
答案 2 :(得分:2)
使用Linq:
public static bool IsSequential(int[] a)
{
return Enumerable.Range(1, a.Length - 1).All(i => a[i] - 1 == a[i - 1]);
}
答案 3 :(得分:2)
对于所有顺序的非顺序数据,这应该可以解决问题。带有样本输入的完整示例。 经过测试,效果正常
var list = new List<int>(new[] { 7, 6, 5, 4, 3,9});
int minValue = list.Min();
int maxValue = list.Count;
List<int> 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");
}
答案 4 :(得分:1)
与make sure array is sequential in C#
相同在那里回答:
如果您确定数组已排序且没有重复,则可以检查:
array[array.Length - 1] == array[0] + array.Length - 1
答案 5 :(得分:1)
var result = Enumerable.Range(array[0], array[array.Length-1]).Except(array.ToList());
答案 6 :(得分:0)
首先对数组进行排序,使用distinct()删除N类(例如对),如果数组长度总是== 5,那么你需要做的就是if((array [4] - array [0] )== 4)返回true。
如果它的德州扑克或者你需要考虑一个ace高和ace低的直线,它会变得更加复杂。