Хобрук: Ваш путь к мастерству в программировании

установка значений одной карты на другую в зависимости от условия

У меня есть пара записей rec1 и rec2.

Оба имеют общее имя ключа/значения1.

когда имя1 равно в обеих записях, мне нужно установить несколько значений rec2 в rec1.

Я помещаю их в две разные петли, как показано ниже.

rec1.each{r1-> each
    rec2.each{r2-> each
        if(r2.name1 == r1.name1){
        r1.name2 = r2.name2
        r1.name3 = r2.name3
        }
    }
}

Есть ли лучший способ сделать это

Пример: (извините, я просто вставляю содержимое)

recoRecord : [["CHANNEL":INBOUND, "STOCK_LEVEL":2410.0, "OFFER_TARIFF_ID":FBUN-MVP-VME-VIRGIN-31-24-04, "P_BAND":P4-6, "CONTRACT_LENGTH":24.0, "INCENTIVE_POINTS ":10.0, "HANDSET_PKEY_ID":SAM-STD-I9300-1, "CUST_TYPE":MEDIA]]

записи: [["MEDIA_SUBSIDY_VALUE":0.0, "CREDIT_CLASS":C5, "DOM_OTHER_MARGIN":0.0, "isBatchTerminator":false, "CALL_GROUP_DESC":COMBINED, "DM":20.0, "BLACKBERRY_IND":N, "PREFERRED_BLACKBERRY": N, "ERROR_ID": 0, "CUST_TYPE": MEDIA, "TARIFF_MRC": 30,99, "MOST_USED_TAC": 35961404, "FORM_FACTOR": null, "CAMERA_IND": null, "NEW_MARGIN": 22.272501, "MODEL": null, «IS_MMS_ALLOWANCE»: N, «ACTIVE_HANDSET_BANDS»:, «CUST_OUT_OF_ALLOWANCE_PLAN»: JV15, «OOB_DOM_VOICE»: 0,0, «OOB_DOM_SMS»: 0,0, «VM_CUST_FLAG»: Y, «IB_DATA»: 0,0, «CHANNEL_FLAG»: INBOUND, «SMS_ALLOWANCE» :5000.0, "ROAM_SMS_MARGIN":0.0, "TARIFF_DESC":30,99 Virgin Media 24 месяца+1ГБ 1300мин, "MARGIN_CHANGE_PCT":0.12691319, "OFFER_VOICE_ALLOWANCE":600, "MAKE":null, "IS_ONNET_ALLOWANCE":Y, "OFFER_CONTRACT_TERM": 24.0, "PREFERRED_MINUTES": 1300, "PREFERRED_ON_NET": Y, "MOST_USED_IMEI": 359614048625860, "СКИДКА": 3.0, "NetPresentValue": 1.15, "RecInd": 1, "WIFI_IND": ноль, "IPHONE_IND": N, "OFFER_TARIFF_ID":FBUN-MVP-VME-VIRGIN-31-24 -04, "Поощрительные баллы": -1.0]

когда OFFER_TARIFF_ID в обеих записях одинаковы, я хотел бы установить несколько значений первой записи во вторую запись

17.12.2013

  • Можете ли вы привести несколько примеров входных данных и ожидаемых результатов? 17.12.2013
  • конечно, отредактирую мой вопрос 17.12.2013
  • Также я дал комментарий к одному из моих предыдущих вопросов, на которые вы ответили... не могли бы вы проверить stackoverflow.com/questions/20610469/ 17.12.2013
  • Опять же, это недопустимый Groovy... Я имел в виду пример, который я мог бы запустить, и, возможно, что-то немного урезанное, чтобы мы могли видеть, что происходит... Кроме того, ожидаемый результат... 17.12.2013
  • Это сработало для меня, просто я искал лучший способ его реализации, спасибо, Тим. 17.12.2013
  • Было бы полезно, если бы предоставленные вами карты были действительными, у вас есть ключи в кавычках, а не значения, и я не уверен, что records : должен быть records = 17.12.2013
  • О, моя ошибка, я просто вставил туда свои логи (вывод), а не свой код, извините за путаницу. 17.12.2013

Ответы:


1

Вам не нужно перебирать обе карты. Просто нужно проверить, соответствует ли значение этого конкретного ключа или нет.

if(r2.'OFFER_TARIFF_ID' == r1.'OFFER_TARIFF_ID'){
  //push the required entries from r1 to r2
}

Хотя в вашем редактировании я не вижу допустимой структуры данных для записей, я рассматривал r1 и r2 как Карты.

17.12.2013
  • Спасибо за ответ 17.12.2013
  • Новые материалы

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.

    Получение стоковых обновлений с помощью Python
    Для начинающего финансового аналитика Введение Описание: Этот проект Python создает скрипт для получения текущих обновлений акций с финансового веб-сайта Yahoo. Для этого проекта мы..