Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查数字数组是否连续的函数方法_C#_.net_C# 3.0 - Fatal编程技术网

C# 检查数字数组是否连续的函数方法

C# 检查数字数组是否连续的函数方法,c#,.net,c#-3.0,C#,.net,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) retur

假设当每个成功的元素都具有前一个元素
+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;
}
bool IsSequential(int[]数组)
{
for(int i=1;i
我正在尝试确定扑克牌手是否是直的。

试试这个:

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

我不知道这是否真的是一种改进/更好,但你可以使用范围

ENumerable.Range(0, myArray.Length).Any(i => myArray[i] != myArray[0] + i)
如果数组不包含序列号,则返回true。

与以下内容相同:

请回答:

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

array[array.Length - 1] == array[0] + array.Length - 1
使用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<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");
 }
var list=newlist(new[]{7,6,5,4,3,9});
int minValue=list.Min();
int maxValue=list.Count;
列表测试=Enumerable.Range(minValue,maxValue).ToList();
var结果=可枚举的范围(minValue,maxValue).Exception(列表);
if(result.ToList().Count==0)
{
Console.WriteLine(“数字按顺序排列”);
}
其他的
{               
Console.WriteLine(“数字不按顺序”);
}

首先对数组进行排序,使用distinct()删除一种类型的N(例如,对),如果数组长度始终为==到5,则只需在((数组[4]-数组[0])==4)返回true即可


如果是texas holdem或者如果你需要同时考虑ace high和ace low straight,情况会变得更复杂。

@AlexeiLevenkov:如果你不使用
Skip
,你只是在比较元素本身,当然它们总是相等的。只是补充一下,如果INT数组不有序,这将不起作用。e、 g.这适用于
[4,5,6]
,但不适用于
[5,4,6]
。您只需使用
array.OrderBy(a=>a).Zip(array.Skip(1),(a,b)=>(a+1)==b).All(x=>x)使后者起作用。为了使其也能用于减少顺序数组,请使用
返回array.Zip(array.Skip(1)、(a,b)=>(a+1)==b)。All(x=>x)| array.Zip(array.Skip(1)、(a,b)=>(a-1)==b)。All(x=>x)您如何处理ace的可能重复?如果其值为1,则无法使用此方法检测ace high straight。您的代码简单且工作完美,只需使用您已有的代码即可-很好。空数组是否可以被视为连续数组?这是错误的,这样,除了first和last之外,您无法了解其他元素的任何信息。@Serge这就是指定的原因:如果您确定数组已排序且没有重复项。如果是,答案是正确的。想想为什么!不错,不过如果我们想检查数组是否是连续的:
Enumerable.Range(0,myArray.Length).All(i=>myArray[i]==myArray[0]+i)
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");
 }