💡

C# IDを一意に定めるためのコードを書いた(アルゴリズム初心者用)

2025/02/11に公開

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