我有一组未分类的数字。此数组中的大多数数字是连续的(1,2,3,4,5,...),但有时其中的数字高于其余数字。
int highestNumber = int.MinValue;
int secondHighestNumber = int.MinValue;
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 1207, 7, 8, 9, 1803, 10, 11, , 9000, 9001 };
int counter = 0;
foreach (int number in arr) {
if (number > highestNumber) {
secondHighestNumber = highestNumber;
highestNumber = number;
}
else if (number > secondHighestNumber) secondHighestNumber = number;
}
当我运行代码时,它会告诉我9001是最高的数字,9000是第二高的数字。但我想改变它,以便我得到一个从1到11的所有数字的数组,所有连续数字只有一个,第二个数组有所有更大的数字:1207,1803,9000和9001 9000和9001不应该在第一个数组中,因为这些数字与其余数字之间的差异太大。所以最终结果应如下所示:
int[] arr1 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
int[] arr2 = new int[] { 1207, 1803, 9000, 9001 };
有关其目的的一些背景信息:
Cient创建文章,每篇文章都有一个文章编号,通过查找"文章"中最高文章编号的内容来创建。到目前为止的表格(例如20),则新文章的编号为+ 1(例如21);所以每个数字增量。然而,客户希望能够有时添加文章并输入他希望用于文章的文章编号,因此,对于他创建的最后一篇文章,他输入7000作为文章编号。如果他之后再创建另一篇文章,我必须继续增加数字列表。因此,除非客户再次更改下一篇文章的值,否则下一篇新文章的文章编号应为22(而不是7001)。
任何帮助都会非常感激,因为我已经被困在试图解决这个问题一段时间了。
答案 0 :(得分:1)
我不确定你是否只想获得你应该使用的下一个号码,或者你想要2套。如果你想要这两套,我会这样做:
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 1207, 7, 8, 9, 1803, 10, 11, , 9000, 9001 };
int counter = 0;
List<int> l1 = new List<int>();
List<int> l2 = new List<int>();
foreach (int number in arr) {
if(l1.Count==0 || l1[l1.Count-1] == (number -1))
l1.Add(number);
else
l2.Add(number);
}
答案 1 :(得分:0)
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 1207, 7, 8, 9, 1803, 10, 11, 9000, 9001 };
// Sort the array
Array.Sort(arr);
// Start at the beginning and check if the index matches the actual number.
// Computer begins at 0, so fix that
for (int index=0;index<arr.Length; index++)
{
if (arr[index] != index+1)
{
Console.WriteLine("Next ID is " +(index+1));
break;
}
}