控制布尔数组中的值

时间:2015-04-17 19:42:26

标签: c# arrays linq boolean

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..

任何人都可以解释怎么做?

1 个答案:

答案 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) + "]");
}