bool [] isAvailable = new boolean [5];
最初我将数组中的所有值设置为true。
我现在正在改变(一次一个)将值(随机选择)改为false,如果存在超过3个错误值,我需要一种方法将其中一个错误值转回true。 此外,它不能是最后改变的值变为真。
我正在使用LinQ和C#:
void checkArray() {
if (isAvailable.Where (c => !c).Count () > 3) {
int posOpen = ???;
}
}
情景:
[true,true,true,true,true] -> [true,true,true,true,false] ->
[true,true,false,true,false] -> [false,true,false,true,false] ->
[false,true,true,true,false] -> [false,false,true,true,false] etc..
任何人都可以解释怎么做?
答案 0 :(得分:4)
不是直接更改索引值,而是将更改包装在辅助方法中,然后可以响应更改。您可以使用队列跟踪项目的伪造顺序,然后在队列达到特定大小后将其更改回来。
void Main()
{
ShowArray(); //[True, True, True, True, True]
ChangeValue(1);
ShowArray(); //[True, False, True, True, True]
ChangeValue(4);
ShowArray(); //[True, False, True, True, False]
ChangeValue(3);
ShowArray(); //[True, False, True, False, False]
ChangeValue(0);
ShowArray(); //[False, True, True, False, False]
}
bool[] _array = {true,true,true,true,true};
Queue<int> _changed = new Queue<int>();
void ChangeValue(int index)
{
if(_array[index]) // do nothing if it was already false
{
_array[index] = false;
_changed.Enqueue(index);
if(_changed.Count() > 3)
{
_array[_changed.Dequeue()] = true;
}
}
}
void ShowArray()
{
Console.WriteLine("[" + string.Join(", ", _array) + "]");
}