.Bag.invert.max.value
Пример:
$_ = < 4 3 1 0 6 1 6 4 4 0 3 1 7 7 3 4 1 1 2 8 >».Int;
say .Bag.invert.max.value; # implicitly calls $_.Bag…
Если есть галстук, он напечатает больше из тех, которые связали.
.Bag
Метод на список или массив создает хэш квантора , который связывает общее количество, сколько раз данное значение было видно с этим значением.
bag(4(4), 3(3), 1(5), 0(2), 6(2), 7(2), 2, 8)
.invert
Метод создает список пар в мешке с ключом и значением выгружена. (Причина, по которой мы это называем, заключается в следующем методе, который делает то, что мы хотим)
4 => 4, 3 => 3, 5 => 1, 2 => 0, 2 => 6, 2 => 7, 1 => 2, 1 => 8
.max
Метод на список пара возвращает наибольший пар сравнения ключей первые и в случае равенства сравнения значений.
(Это потому, что именно так multi infix:<cmp>(Pair:D \a, Pair:D \b)
определяется, что больше)
5 => 1
.value
Метод возвращает значение из пары. (Это был бы ключ, за которым мы следовали, если бы не .invert
звонок ранее)
1
Если вы хотите вернуть все значения, которые связаны в случае связи:
say @list.Bag.classify(*.value).max.value».key
.classify
Метод возвращает список пар , где ключи от вызова лямбда Whatever *.value
с каждой из пар.
1 => [2 => 1, 8 => 1],
2 => [0 => 2, 6 => 2, 7 => 2],
3 => [3 => 3],
4 => [4 => 4],
5 => [1 => 5]
Затем мы звоним, .max
чтобы получить самую большую пару.
"5" => [1 => 5]
Звонок, чтобы .value
получить нам оригинальные пары из сумки (только один в этом случае)
1 => 5
Затем мы используем метод >>.key
для вызова .key
каждой пары в списке, чтобы мы получили список значений, которые были замечены чаще всего.
1