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

Как вставить if в хэш-карту в clojure

Это действительно:

{:a :v (if true :f) :r }

Это не

{:a :v (if true {:f :r}) }

Так как он хочет поместить новую хэш-карту в структуру

Мне нужно вернуть в этот if специальную структуру (я забыл ее имя), содержащую ключ и значение, чтобы она была вставлена ​​в хэш-карту.

Спасибо


Ответы:


1

Второй случай терпит неудачу не потому, что форма if возвращает неправильный тип значения, а потому, что карта содержит нечетное количество элементов. Литералы карты должны содержать четное количество форм, а if — это одна форма.

Есть несколько способов добавить объекты на карты в Clojure.

Вы можете использовать conj с вектором или аргумент карты:

(conj {:a :v} [:f :r])  ;;=> {:f :r, :a :v}
(conj {:a :v} {:f :r})  ;;=> {:f :r, :a :v}

Вы можете использовать assoc с ключом и значением как отдельные аргументы:

(assoc {:a :v} :f :r)   ;;=> {:f :r, :a :v}

Или вы можете использовать merge с двумя (или больше) карты в качестве аргументов:

(merge {:a :v} {:f :r}) ;;=> {:f :r, :a :v}

Специальная структура, о которой вы думаете, может быть MapEntry. Вот что представляют собой элементы в последовательности, созданной вызовом seq на карте.

Например:

(seq a-map)                ;;=> ([:a :v] [:f :r])
(first (seq a-map))        ;;=> [:a :v]
(-> a-map seq first class) ;;=> clojure.lang.MapEntry

Записи карты выглядят и ведут себя так же, как векторы, с одним дополнением. Вы можете использовать функции key и val для доступа к ключу и значению соответственно (фактически эквивалентны (get map-entry 0) и (get map-entry 1)).

(key map-entry) ;;=> :a
(val map-entry) ;;=> :v

Вы можете conj ввести запись карты на карту точно так же, как и вектор.

19.02.2014
  • Да, я искал MapEntry. А то, что я хотел, было совершенно невозможно. Спасибо. 19.02.2014

  • 2

    Условные макросы многопоточности часто полезны для такого рода вещей. Особенно если вы уже используете их для применения серии преобразований к своим данным. Вот набросок создания заголовков http

    (let [compressed? true
          custom-header? false]
    
        (-> {:content-type "text/plain"}
            (cond-> compressed? (assoc :content-encoding "gzip"))
            (cond-> custom-header? (assoc :my-custom-header "foo"))
            clojure.walk/stringify-keys))
    
    ;=> {"content-encoding" "gzip", "content-type" "text/plain"}
    
    19.02.2014

    3

    Это то, что тебе надо?

    (merge {:a :v} (if true {:f :r}))
    => {:f :r, :a :v}
    
    19.02.2014
    Новые материалы

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

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

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

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

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

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

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