我希望能够根据数组的可用性从数组中获取整数。当一个可用的整数被选中时,它会变得不可用,直到它被归还。
虽然这遵循了一个简单的池子想法,但我认为我的方法过于复杂,并希望得到一些建议。
我正在实现许多类似池的关键功能,包括:
- 获取第一个可用的最小整数
- 按升序获取所有可用整数
- 从数组中获取特定整数
- 将特定整数返回给数组以使其再次可用
对于第一种方法,我通过每次成功调用整数请求时递增一个值来记录可用整数。如果可用整数按其 .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; }
}
}
这让我认为我把这件事弄得太复杂了,并且有一种更优雅的方式来解决这个问题。有什么建议么?