Пользовательский тип данных (структуры) и массивы - PullRequest
1 голос
/ 06 декабря 2011

У меня есть поле со списком, который при выборе отображает текст в 3 текстовых полях.

Элементы комбинированного списка - это 50 штатов, а в текстовых полях отображается информация о статутах штатов. Сейчас я использую многомерный массив для хранения данных для каждого состояния (каждый элемент в массиве содержит состояние, элемент 1, элемент 2, элемент 3).

Мой вопрос таков: было бы лучше или компактнее создать тип данных State, который содержит 3 элемента, и даже если это даже эффективный подход? Мне не нравится массив, это все, что я умею делать прямо сейчас.

В большинстве случаев 3 типа данных используются повторно.

Например, одним из них является часовой пояс, который использует штат, поэтому есть только 6 возможных вариантов.

У меня нет кода передо мной, или я бы опубликовал его, просто кое-что, о чем я думал.

Ответы [ 3 ]

4 голосов
/ 06 декабря 2011

Вопрос, который вы должны задать себе о многомерном массиве: «Может ли другой программист посмотреть на него и понять, что происходит?»

Является ли компактнее?Может быть, может и нет.Все зависит от кода.По правде говоря, если вы не имеете дело с очень низкими требованиями к памяти, это, вероятно, не имеет значения.Подумайте об этом так, скажем, что каждый часовой пояс занимает четыре байта (размер целого числа).Наличие записи для каждого часового пояса означает, что вы использовали 50 х 4 = 200 байт.Недостаточно беспокоиться о том или ином способе.

Я бы изменил это, потому что через 6 месяцев у вас, вероятно, будут трудности с пониманием того, что он делает.Читаемость и ремонтопригодность важны почти во всех ситуациях.

, поэтому, возможно, пример:

class State
{
    public State (string stateId, int timeZoneOffset)
    {
       StateId = stateId;
       TimeZoneOffSet = timeZoneOffset;
    }

    public String StateId {get;set;}
    public int TimeZoneOffest {get;set;}
}

public class StatesAndTerritories
{
    List<State> _states = new List<State>
    public StatesAndTerritories ()
    {
      //_state.Add state information here

      _state.Add(new State("AZ", -6); ......

    }

    public IEnumerable<State> GetStates (){
     return _state;
    }

   public IEnumerable<State> GetStatesInZimeZone(int timezone)
    {}

    etc..
}
2 голосов
/ 06 декабря 2011

Выберите пользовательский тип, он чище (вы можете получить доступ к свойствам по имени), меньше подвержен ошибкам (сложнее спутать имена, чем индексы) и удобен в обслуживании (свойства не "отсортированы", нет ненужных length это должно соответствовать количеству свойств, и если вы хотите свойства различных типов, у вас есть тип безопасности).

1 голос
/ 06 декабря 2011

Исходный код был бы полезен для меня, чтобы понять, что именно вы делаете.

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

Это ускорит доступ к элементам и упростит отслеживание того, какая переменная имеет какое значение (именованные переменные вместо индексов массива).Важно помнить, что структура является типом значения, поэтому, если вы передадите ее другой функции, функция получит копию структуры, а не оригинал.Это не проблема, если вы работаете непосредственно с массивом, но будет проблемой, если вы используете List или вам нужно передать информацию о выбранном состоянии другому методу.

...