Подтвердить что ты не робот

Что является хорошей заменой для большого коммутационного шкафа?

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

Власть для каждой страны фиксирована, и у меня есть данные для всех 196 стран здесь на листе бумаги. Например, мой код должен проверять, если название страны - США (и если да, установите его мощность 100) и т.д.

Я знаю, что могу сделать это с помощью коммутационного футляра, но какой лучший, самый приятный и эффективный способ сделать это?

4b9b3361

Ответ 1

Вы можете хранить пары мощности страны в Dictionary<string, int>, а затем просто получить оценку конкретной страны с помощью индексатора:

var points = new Dictionary<string,int>();
// populate the dictionary...
var usa = points["USA"];

Изменить: Как указано в комментариях, вы должны хранить информацию во внешнем файле, например, xml будет хорошим выбором. Таким образом, вам не нужно изменять код для добавления или удаления стран. Вам просто нужно сохранить их в XML файле, отредактировать его всякий раз, когда вам нужно. Затем проанализируйте его, когда ваша программа запустится, и загрузите значения в Dictionary. Вы можете использовать LINQ to XML для этого. Если вы не использовали его раньше есть хорошие примеры в документации , чтобы начать работу.

Ответ 2

В то время как ответ Selmans правильный и хороший, он не отвечает, как на самом деле заполнять словарь. Вот он:

var map = new Dictionary<string, int> {
    {"USA", 100},
    {"Germany", 110}
};

вы также можете просто добавить его следующим образом:

map.Add("USA", 100);
map.Add("Germany", 110);

Теперь вы можете получить доступ к значению (как уже упоминалось в Semans):

map["USA"] = 50;        // set new value for USA
int power = map["USA"]; // get new value

EDIT: Как уже упоминалось в комментариях и других ответах, вы, конечно, можете хранить данные во внешнем файле или в любом другом хранилище данных. Сказав это, вы можете просто инициализировать пустой словарь, а затем заполнить его добавленным методом, ранее упомянутым для каждой записи в этом хранилище.

Ответ 3

Это правильный вопрос для начала, но вам нужно много чего научиться. Многие люди дали вам ответы на заданный вами вопрос. Я буду раздражать Zen и скажу вам, чтобы убрать этот вопрос, потому что есть большая проблема для решения.

Вместо жесткого кодирования сохраните связанные свойства в n-кортеже, также известном как строка базы данных, и используйте механизм базы данных для управления отношениями между ними. И тогда, поскольку вы используете С#, вероятно, было бы разумно научиться использовать LINQ. Но прежде чем вы это сделаете, изучите теорию моделирования данных, потому что моделирование данных - это то, что вы делаете.

Ответ 4

Поскольку вы сказали, что у вас есть "объекты" под названием "Страна", и вы отметили свой вопрос "С#", кажется, что у вас есть две силы для работы в вашем коде. Один из них заключается в том, что необходимость ссылаться на карту, однако эффективно реализована, не так дешева, как обращение к переменной-члену. С другой стороны, может быть какая-то польза от установки, где все атрибуты страны могут быть найдены в том же месте, что и атрибуты других стран (решения, ориентированные на карту, затрагивают эту проблему). Но эти силы можно примирить примерно так:

class Country { // Apologies that this sketch is more C++ than C#
public:
   Country(string name_, int power_);
private:
   string name;
   int power;
};
void MakeCountries()
{
    countries.Add(new Country("USA", 50));
    countries.Add(new Country("Germany", 60));
    // ....
}

Ответ 5

Вам нужно обновить свои данные во время выполнения?

  • Да? Загрузите данные из внешнего хранилища в словарь.

  • Нет? Использовать переключатель

    Пусть компилятор генерирует словари и поисковые запросы на основе хэша. Когда профайлер начинает кричать, исследуйте альтернативные решения. Например, прочитайте ответ из Что быстрее, включите строку или elseif по типу? ".

Ответ 6

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

Если его нет, другой способ - реализовать их как связанный список. Так что u будет в состоянии изменить, если вы хотите. Список с двумя полями; 1 для страны и других для власти