2017-12-07 15 views
-1

私はソートされていない配列を持っています。この配列のほとんどの数字は連続しています(1,2,3,4,5、...)が、残りの数字よりも高い数字があることがあります。C#:数字のループスルーと連続した数字を1つの配列に入れ、他の数字は他の配列の他の数字

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が2番目に高いことがわかります。しかし、私は1から11までのすべての数字の配列を得るように変更したいと思います。には1つだけの違いがあります。と2番目の配列はすべて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)です。したがって、1つの数字に増分。しかし、クライアントは、記事を追加して記事の希望する記事番号を入力することができるようにしたいので、最後に作成した記事の記事番号を7000と入力してみましょう。その後、彼はその後、別の記事を作成する場合、私はインクリメントする数のリストを続行する必要があります。したがって、クライアントが次の記事の値を再び変更しない限り、次の新しい記事は記事番号として22でなければなりません(7001ではなく)。

私は今これを理解しようとしているので、どんな助けもありがとうございます。

+1

それを並べ替えて、最初から始めてください。 –

+0

@ThomasWellerですが、コードは9001を最高、9000を2番目に高く返します。 – Magali

+3

'arr.Select(i => i + 1).Except(arr).Min()' – PetSerAl

答えて

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; 
    } 
} 
+0

あなたのアプローチを再修正することができます。各アーティクルの2つの番号、システム生成番号:1,2,3、...およびクライアントが割り当てた番号(存在する場合)を格納します。それぞれの状況に適した番号を使用してください。 – rossum

1

使用する必要がある次の番号を取得したい場合や、2つのセットが必要な場合はわかりません。あなたは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); 
} 
関連する問題