Определите, содержит ли массив все нули - PullRequest
0 голосов
/ 01 мая 2018

Я создаю следующий массив следующим образом:

array<UInt16>^ temp = gcnew array<UInt16>(1000);

Как определить, заполнен ли весь этот массив нулями или нет.

Я думаю, что смогу использовать TrueForAll (T) , но я не уверен.

Ответы [ 4 ]

0 голосов
/ 07 мая 2018

Чтение спецификации C ++ / CLI заполнено 0, потому что вы создали его с "новым выражением" и значение по умолчанию для типа элемента равно 0.

24.2 Создание массива CLI

Экземпляры массива CLI создаются с помощью новых выражений, содержащих gcnew (§15.4.6) или…

Элементы массивов CLI, создаваемых новыми выражениями, всегда устанавливаются в значения по умолчанию.

0 голосов
/ 01 мая 2018

Это должно работать правильно (здесь я использовал LINQ):

IEnumerable<int> values = new List<int>(); // Or use any array type instead of List.

... Add your values here ...

var allAreZero = !values.Any(v => v != 0);

P.S. класс массива наследует IEnumerable.

А вот решение с foreach:

var isAllZero = true;
foreach (var value in values)
{
    if (value != 0)
    {
        isAllZero = false;
        break;
    }
}

UPDATE

На самом деле разница между TrueForAll и моим LINQ кодом заключается в следующем: LINQ код использует свободный синтаксис (или, возможно, также запрос), где TrueForAll - это просто обычная функция, в которую вы отправляете массив как параметр.

0 голосов
/ 01 мая 2018
var allElementsAreZero = temp.All(o => o == 0);

Просто так.

Он вернется, когда найдет тот, который не удовлетворяет условию, поэтому может не обязательно перебирать всю вашу коллекцию:

"Перечисление источника останавливается, как только может быть определен результат."

https://msdn.microsoft.com/en-us/library/bb548541(v=vs.110).aspx

0 голосов
/ 01 мая 2018

инициализируют счетчик от 0, затем используют цикл for для перемещения по массиву и увеличивают счетчик всякий раз, когда он находит 0, и в конце сравнивают счетчик с размером массива, если он равен, он имеет все нули

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...