.NET 如何检查列表<int> 是否按数字顺序 (1-9)?
.NET How to check if a list<int> is in numerical order (1-9)?
我有一个列表,例如 { 1, 2, 3, 4, 5 } 或 { 1, 2, 4 } 或 { 3, 4, 5 }。我需要检查列表是否按数字顺序排列且没有跳过。例如,{ 1, 2, 3 } 有效,但 { 1, 2, 4 } 无效。该列表可以以任意数字开始,以任意数字结束,并包含任意数量的整数。这就是我所拥有的,它似乎有效但不是很优雅。有更好或更清洁的方法吗?
public bool ValidateList(List<int> list)
{
int previousInt = null;
foreach (var index in list)
{
if (previousInt == null)
{
previousInt = index;
continue;
}
if (index != previousInt + 1)
return false;
previousInt = index;
}
return true;
}
LINQ 非常适合这类事情:
using System.Linq;
bool ValidateList(List<int> list)
{
var range = Enumerable.Range(list.First(), list.Count());
return Enumerable.SequenceEqual(range, list);
}
我有一个列表,例如 { 1, 2, 3, 4, 5 } 或 { 1, 2, 4 } 或 { 3, 4, 5 }。我需要检查列表是否按数字顺序排列且没有跳过。例如,{ 1, 2, 3 } 有效,但 { 1, 2, 4 } 无效。该列表可以以任意数字开始,以任意数字结束,并包含任意数量的整数。这就是我所拥有的,它似乎有效但不是很优雅。有更好或更清洁的方法吗?
public bool ValidateList(List<int> list)
{
int previousInt = null;
foreach (var index in list)
{
if (previousInt == null)
{
previousInt = index;
continue;
}
if (index != previousInt + 1)
return false;
previousInt = index;
}
return true;
}
LINQ 非常适合这类事情:
using System.Linq;
bool ValidateList(List<int> list)
{
var range = Enumerable.Range(list.First(), list.Count());
return Enumerable.SequenceEqual(range, list);
}