Массив, Arraylist или список списков? - PullRequest
2 голосов
/ 25 ноября 2011

Я собирался использовать стандартный массив, мне нужно, чтобы х число строк и было 2 столбца

double[,] members = new double[x, 2];

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

members[0, 0] = cost;
members[x, 1] = tax;
x++;

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

Ответы [ 4 ]

7 голосов
/ 25 ноября 2011

У меня был бы список некоторого типа, где у этого типа есть стоимость и налог.

Если пространство является премией, это может быть структура с двумя двойными числами (кстати, десятичное будет более уместным? Это почти всегда лучший выбор за деньги), но если это так, сделайте его неизменным.

Например:

public struct YourType {
    private readonly decimal cost, tax;
    public decimal Cost { get { return cost; } }
    public decimal Tax { get { return tax; } }
    public YourType(decimal cost, decimal tax) {
        this.cost = cost;
        this.tax = tax;
    }
}

С:

List<YourType> list = new List<YourType>();
2 голосов
/ 25 ноября 2011

Возможно, количество элементов во втором измерении фиксировано или, по крайней мере, предсказуемо, поэтому, если вы используете Microsoft .NET Framework 4.0, вы можете использовать список кортежей:

List<Tuple<double, double>> list = new List<Tuple<int, int>>();

// In your loop...
list.Add(Tuple.Create(cost, tax));

// ... later when retrieving some tuple...
int item0cost = list[0].Item1;
int item0tax = list[0].Item2;

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

1 голос
/ 25 ноября 2011

Используйте List<T>.

С msdn :

ArrayList был заменен на List<T>, что быстрее и имеет больше функций.

T может быть List<double> или double[2], или struct, или 2-кортежем ... но, как сказал Марк, использование List<List<double>> является чрезмернымделать что-то, если вложенному List суждено всегда иметь два элемента.

1 голос
/ 25 ноября 2011

Вы должны использовать List<List<int>>.

...