Nano Hash - криптовалюты, майнинг, программирование

Scala foldLeft on Maps

Как вы используете Map.foldLeft? Согласно документам это выглядит так:

foldLeft [B] (z: B)(op: (B, (A, B)) ⇒ B) : B

Но у меня трудности:

Map("first"->1,"second"->2).foldLeft(0)((a,(k,v)) => a+v )

ошибка: недопустимый формальный параметр

Ошибка указывает на открытую скобку перед k.


Ответы:


1

Если вы хотите использовать синтаксис (a, (k, v)), вам нужно указать компилятору использовать сопоставление с образцом.

Map("first"->1, "second"->2).foldLeft(0){ case (a, (k, v)) => a+v }

Обратите внимание, что оператор case требует фигурных скобок.

14.11.2010
  • Зачем нужно сопоставление с образцом? Существуют ли какие-либо другие шаблоны, которые можно сопоставить в foldLeft ? 26.05.2020

  • 2

    Я думаю, вы не можете сопоставлять шаблоны с кортежами, как вы ожидаете:

    Map("first"->1,"second"->2).foldLeft(0)((a, t) => a + t._2)
    

    На самом деле, использовать значения и сумму проще.

    Map("first"->1,"second"->2).values.sum
    
    14.11.2010
  • Он может выполнять сопоставление с образцом для кортежей. Однако для сопоставления с образцом необходимо использовать case. 15.11.2010
  • @Daniel В этом преимущество моего адвокатского предложения: оно правильное (он не может сопоставить шаблон, как ожидал), но я забыл синтаксис падежа. 15.11.2010
  • Однако для подобных проблем использование values или mapValues является абсолютно ясным решением (что почти всегда делает его правильным выбором) 15.11.2010

  • 3

    Хитрость заключается в использовании частичной функции в качестве блока кода, другими словами, вы добавляете оператор case, который соответствует аргументам:

    Map("first" -> 1, "second" -> 2).foldLeft(0) { case (a, (k, v)) => a + v }
    
    14.11.2010

    4

    На самом деле это не ответ на ваш вопрос, но я нашел его полезным, когда начинал со складок, поэтому я все равно скажу! Обратите внимание, что «псевдоним» метода /: для foldLeft может быть более понятным по двум причинам:

    xs.foldLeft(y) { (yy, x) => /* ... */ }
    
    (y /: xs) { (yy, x) => /* ... */ }
    

    Обратите внимание, что во второй строке:

    • более очевидно, что значение y вставляется в коллекцию xs
    • вы можете легко запомнить, что порядок аргумента Tuple2 такой же, как порядок метода «вызов»
    14.11.2010
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..