В Chapel я могу подсчитать количество элементов массива, равное заданному значению, как
var a = [1,2,5,5,5];
writeln( a.count( 5 ) ); // this gives 3
но аналогичный метод, похоже, не работает для подсчета количества истинных элементов:
writeln( count( a > 1 ) );
writeln( ( a > 1 ).count( true ) );
В этом случае мне нужно написать явный цикл for или есть какая-то другая функция (или метод) для этой цели...?
Обновлять
После еще одного эксперимента кажется, что если я сохраню результат a == 5
в новый массив
var mask = ( a == 5 );
тогда он работает так, как ожидалось
writeln( mask.count( true ) ); // gives 3
Итак, a == 5
может представлять что-то отличное от объекта массива и поэтому не предоставляет .count()
напрямую?
a.count( 5 )
эквивалентным:count( a > 1 )
??? - person Nir Alfasi   schedule 12.05.2017a == 5
по существу продвигает оператор==
, что приводит к множеству значений,false false true true true
. - person Brad   schedule 12.05.2017