💡
C# IDを一意に定めるためのコードを書いた(アルゴリズム初心者用)
1 から順番にIDを振り分けるコード
やりたいこと。
要素に対してかぶらないようにIDを振りたい
実装のロジック
要素数と、最後に使われるべき数を比較することによって、一意のIDを定める実装とする。
Listの中に要素が入っており、この数を数える。
もしも、すべての数が削除されずに使われている場合は、1からリストの個数番目まできれいに使われている。
そのため、それに1を足した数で判定を開始する。
すべてのIDを参照して、自分と同じものがないかを判定する。
削除されていないリストでは、だれも使っていないので、そのまま使用可能。
もし、削除されていた場合。
1,2,4,5のような場合を考えてみよう。
要素数は4なので、これに1を足した5で始める。
すると、5は使われている。
なので、1つ値を下げて、判定をする。
まだ駄目なので、もう一つ。これで3が開いていることが分かった。
次からは、要素数が5になるので、後ろから順に使える。
public int Generate_ID()
{
int count = List.Count;
if (count <= 0) {//要素がないとリストはバグが起きるので、一応こうしている
return 1;
}
for (int i = count + 1; count > 0; i--) { //要素数+1から始めて1で終わる
bool flag = false;
foreach (id_name item in List) {
if (item.ID == i) {
flag = true;
break;
}
}
if (flag == false) {
MessageBox.Show("ジェネレートID =" + i);
return i;
}
}
MessageBox.Show("roop外にいる");
return -1;
}
Discussion