可用性に基づいて配列から整数を取得できるようにしたいと考えています。使用可能な整数が選択されると、返されるまで使用できなくなります。
これは単純なプールのアイデアに従いますが、私のアプローチでは問題が複雑になりすぎていると思います。アドバイスをお願いします。
私が実装している重要なプールのような関数がいくつかあります。
- 利用可能な最初の最小整数を取得する
- 利用可能なすべての整数を昇順で取得する
- 配列から特定の整数を取得する
- 特定の整数を配列に戻して、再び使用できるようにします
最初の方法では、整数のリクエストが正常に呼び出されるたびに値をインクリメントして、使用可能な整数の集計を保持します。この値は、.IsAvailable ブール値でソートされている場合に、利用可能な整数の開始インデックスを決定するために使用できます。
public static int GetInteger()
{
// Get the next available integer
int startIndex = integers.Length - numAvailableIntegers;
var c = integers[startIndex];
c.IsAvailable = false;
// Sort the integers by availability
Array.Sort(integers, SortIntegerAvailability.Comparer);
numAvailableIntegers--;
return c.Value;
}
ここでの問題は、ブール値でソートすると、後で整数値の昇順でソートする必要があることです。
class SortIntegerAvailability : IComparer<Integer>
{
static IComparer<Integer> comparer = new SortIntegerAvailability();
public int Compare(Integer a, Integer b)
{
if (a.IsAvailable == b.IsAvailable)
{
return 0;
}
else return (a.IsAvailable == true) ? 1 : -1;
}
public static IComparer<Integer> Comparer
{
get { return comparer; }
}
}
これにより、私はこれを複雑にしすぎており、この問題にアプローチするよりエレガントな方法があると考えるようになりました。助言がありますか?