User 12107792 Ответов: 4

Как избежать скамейками, если условия


У меня есть заполненная карта, которую мне нужно переставить в соответствии с ключом. Такая перестановка требует большого количества условий "Если", которые я нахожу довольно уродливыми.

пожалуйста, посоветуйте мне какое-нибудь лучшее предложение.

спасибо

Что я уже пробовал:

for (auto it = inventory_data.begin(); it != inventory_data.end(); it++){
      if(it->first == "device_model"){
        hardware_info.set ("model", it->second);
      }
      if (it->first == "device_serial"){
        hardware_info.set ("serialNumber", it->second);
      }
      if (it->first == "device_revision"){
        hardware_info.set ("revision", it->second);
      }
      if (it->first == "imei_number"){
        mobile_info.set ("imei", it->second);
      }
      if (it->first == "mobile_cellId"){
        mobile_info.set ("cellId", it->second);
      }
      if (it->first == "mobile_iccid"){
        mobile_info.set ("iccid", it->second);
      }
      if (it->first == "msisdn"){
        mobile_info.set ("msisdn", it->second);
      }
      if (it->first == "imsi"){
        mobile_info.set ("imsi", it->second);
      }
      if (it->first == "mcc"){
        mobile_info.set ("mcc", it->second);
      }
      if (it->first == "mnc"){
        mobile_info.set ("mnc", it->second);
      }
      if (it->first == "lac"){
        mobile_info.set ("lac", it->second);
      }
    }

Mohibur Rashid

для (авто = inventory_data.начать(); к != inventory_data.конец(); это++){
если(это-&ГТ;первый == "device_model"){
hardware_info.комплект ("модель", это-&ГТ;второй);
} else if (it - > first = = " device_serial"){
hardware_info.комплект ("серийный номер", он-&ГТ;второй);
} else if (it - > first = = " device_revision"){
hardware_info.комплект ("пересмотр", это-&ГТ;второй);
} остальное, если (это-&ГТ;первый == "imei_number"){
mobile_info.комплект ("ИМЭИ", это-&ГТ;второй);
} else if (it - > first = = " mobile_cellId"){
mobile_info.комплект ("cellId", это-&ГТ;второй);
} else if (it- & gt;first = = " mobile_iccid"){
mobile_info.комплект ("iccid", это-&ГТ;второй);
} еще {
mobile_info.набор (это-и gt;Во-первых, это-&ГТ;второй);
}
}

как насчет этого?

4 Ответов

Рейтинг:
2

CPallini

Альтернативой может быть использование map, имея строку в виде ключевая ценность и структура (содержащая вызываемый метод и аргумент метода) как сопоставленное значение.


Рейтинг:
2

Gaston Verelst

Как насчет использования словаря для решения этой проблемы? Затем весь ваш цикл сокращается до 1 строки, и будущие расширения становятся очень легкими (и устойчивыми к ошибкам).


CPallini

Мы называем это "картой". :-)

Gaston Verelst

Звучит неплохо для меня :-)

Рейтинг:
2

User 12107792

спасибо всем.

Я бы хотел избежать таких заявлений if / if-else @ Mohibur Rashid

Моя проверка состояния-это строка, а не int @ Raunak Gupta

У меня есть карта std::, которая уже заполнена, и мне нужно перебрать ключ, чтобы сравнить @CPallini


CPallini

Я предложил использовать другой карта для связывания строки со структурой {method, method_argument}.

RaunakGupta

вы также можете использовать строку в случае переключателя..
проверьте это https://www.dotnetperls.com/string-switch

Рейтинг:
0

RaunakGupta

используйте переключатель вместо if . это лучшее решение, когда у вас есть несколько условий, и вы также знаете результат


Klaus-Werner Konrad

Это не сработает, потому что в C Вы можете использовать Switch только с целочисленными типами, а строка в C-это массив символов ...