Какой тип коллекции объектов использовать? - PullRequest
4 голосов
/ 22 апреля 2011

Прямо сейчас у меня есть двумерный массив строк, содержащий мои данные:

//...find number of rows needed...
string[,] data = new string[totalRows, 12]; //row / column

Это работает.НО теперь, когда я хочу добавить больше функциональности к моей программе, это больше не в моих интересах, так как конкатенация 2d-массивов, будучи выполнимой, открывает другие проблемы: до этого момента я хранил количество строк в переменной класса, так как у меня не былоне нужно поддерживать два сразу.Возможно, я знаю, что столбцы всегда будут одинаковыми, и я мог бы разделить длину на это, чтобы получить строки и написать метод для их объединения.

У меня такое ощущение, что есть лучший способ сделать это.Мои знания о "более новых" вещах отсутствуют, но я уверен, что один из них отвечает всем требованиям лучше, чем другие.Поэтому, прежде чем я прыгну и создам List<List<String>> data = new List<List<String>>(); или что-то еще столь же странное, чтобы посмотреть, я хочу, чтобы мнения других были более опытными.

Мне не нужны никакие функции сортировки, удаления, вставки и т.Мне просто нужно хранить данные;и теперь я должен быть в состоянии относительно легко пойти на что-то подобное, во всяком случае.data.Length (с указанием только внешней длины) также было бы очень полезно.

Как лучше всего это сделать?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.Спасибо.

Дополнительная информация на основе ответов:

Данные в основном имеют формат электронной таблицы.т. е.

[['1234-56789-12345', 'screwdriver', '', 'ea', '1', '', '', '', '', '', '', ''],
[['1234-56789-54321', 'wrench', '', 'ea', '1', '2', '3', '', '', '', '', '']]

Я не хочу разбираться в том, что описывает информация - мне все равно.Мне нужно местоположение относительно всего остального.

Больше информации:

Использование в качестве резервуара для хранения между одним XML-файлом и другим.Просто понял, что эти первые вещи могут быть еще одним решением моей первоначальной проблемы, но да.Может быть в другой жизни.(Все работает .. как я уже сказал, добавляя функциональность. Если это работает, зачем ломать его?)

Ответы [ 4 ]

2 голосов
/ 22 апреля 2011

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

row 1 => { "Jane", "Smith", "1 Rocket Ave", "Houston", "TX" }

У вас есть

new Person { FirstName = "Jane", LastName = "Smith", /* etc. */ }

Итак, ваш двумерный массив становится одномерной коллекцией этих новых Person объектов, которые легче найти в коде.

List<Person> people = ...
// vs.
string[,] people = ...
1 голос
/ 22 апреля 2011

Это зависит от того, насколько жестким или гибким является «12».

Я бы сказал, List<List<string>> - это гибкий подход.

И List<string[]> исправит это (может быть проще с пустыми столбцами), но при этом будет гибко определять количество строк.Как и в случае зубчатого массива, вам нужно настроить его с помощью цикла for:

List<string[]> data = new List<string[]>();

for (int i = 0; i < desiredRows; i++)
   data.Add(new string[12]);

data[1][1] = "Screwdriver";
0 голосов
/ 22 апреля 2011
Dictionary<string,List<string>>

или

Dictionary<int,List<string>>

или

Dictionary<int,string[]>

и т. Д.

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

Если вам не нужен поиск по какому-либо ключу, с List<List<string>>.

все в порядке.
0 голосов
/ 22 апреля 2011

Почему вы не используете Словарь ?

Примеры здесь .

...