Строковые массивы произвольного размера в C # - PullRequest
3 голосов
/ 25 февраля 2010

Я хочу определить массив строк, но я не знаю, сколько строк мне нужно хранить в нем. Могу ли я определить такой массив и как в него вставить строки?

Ответы [ 6 ]

9 голосов
/ 25 февраля 2010

Список лучше использовать как этот:

List<string> names = new List<string>();
names.Add(name); ///whatever string you want to insert

Позже, если вам нужен массив имен, позвоните:

string[] arr = names.ToArray();

Если вам нужно использовать массив строк, вы должны знать размер заранее. Если вы не знаете размер, то вы можете инициализировать массив некоторой длины по умолчанию (скажем, 10). Вещи, которые вы должны сделать:

  • Сохранить количество строк, уже добавленных в массив
  • Если он достигает длины по умолчанию, вы повторно инициализируете массив с большей длиной (скажем, 15) и копируете все существующие строки в этот новый массив.
  • Вы должны следить за границами этого массива, вы не хотите читать из индексов, которые вы еще не использовали (т.е. если индекс больше, чем count)

Так что лучше использовать список, а не делать все это самостоятельно

6 голосов
/ 25 февраля 2010

Вы можете использовать List<string>, оно будет расширяться по мере добавления к нему элементов.

List<string> myList = new List<string>();
myList.Add("string1");
myList.Add("string2");

Он может быть легко преобразован в массив при необходимости:

string[] stringArray = myList.ToArray();

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

0 голосов
/ 25 февраля 2010

ArrayList тоже поможет.

ArrayList alist = new ArrayList ();

alist.Add (Строка1); alist.Add (String2)

0 голосов
/ 25 февраля 2010

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

var list = new List<string>();
list.Add("string1");

если список должен быть массивом, List<T> имеет метод ToArray().

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

0 голосов
/ 25 февраля 2010

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

List<String> l = new List<String>();

l.Add("your string here");

... И если вы хотите выполнить итерацию,тогда:

foreach(string i in l)
{
   // Do something with each item (i);
}

... И иметь массив:

String[] a =
     l.ToArray();
0 голосов
/ 25 февраля 2010

Я бы использовал класс List. Вы можете добавить столько, сколько вам нужно, без необходимости знать, сколько вы собираетесь вложить туда. Если у вас есть представление о том, сколько будет в списке, вы можете использовать аргумент емкости конструктора List для предотвращения проблем с производительностью.

int capacity = 3;
var listOfNames = List<string>(/* optional */ capacity);
listOfNames.Add("My Name 1");
listOfNames.Add("My Name 2");
listOfNames.Add("My Name 3");

var namesArray = listOfNames.ToArray();

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

См. на этой странице , чтобы увидеть, что все, что вы можете сделать с List.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...