Цикл через строку с разделителями-запятыми, разделить на несколько массивов? - PullRequest
2 голосов
/ 04 мая 2011

У меня есть строка в формате:

div, v6571, 0, div, v8173, 300, p, v1832, 400

Я хочу разбить эту строку на несколько массивов, для приведенного выше примера мне понадобятся 3 массива, чтобы формат был таким:

item[0] -> div
item[1] -> v6571
item[2] -> 0

Я знаю, что могу просто сделать .Split(',') для строки и поместить ее в массив, но это один большой массив. Для приведенного выше примера строки мне потребуется 3 массива со структурой, представленной выше. Просто запутался в итерации по строке!

Спасибо!

Ответы [ 4 ]

8 голосов
/ 04 мая 2011

Я не уверен, что именно вы ищете, но чтобы превратить вышесказанное в три отдельных массива, я бы сделал что-то вроде:

var primeArray = yourString.Split(,);
List<string[]> arrays = new List<string[]>();
for(int i = 0; i < primeArray.Length; i += 3)
{
  var first = primeArray[i];
  var second = primeArray[i+1];
  var third = primeArray[i+2];

  arrays.Add(new string[] {first, second, third});
}

Затем вы можете перебирать список строковых массивов и делать что угодно.

Предполагается, что все ваши строковые массивы всегда будут состоять из трех строк - если нет, вам нужно будет сделать foreach для этого primeArray и более аккуратно упорядочить ваши массивы.

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

var stringToSplit = "div, v6571, 0, div, v8173, 300, p, v1832, 400";
List<string[]> arrays = new List<string[]>();
var primeArray = stringToSplit.Split(',');
for (int i = 0; i < primeArray.Length; i += 3)
{
   var first = primeArray[i];
   var second = primeArray[i + 1];
   var third = primeArray[i + 2];
   arrays.Add(new string[] { first, second, third });
}

Когда я проверяю это в отладке, у него есть все три ожидаемых массива.

4 голосов
/ 04 мая 2011

.Split (",") - ваш лучший выбор.Затем вы можете изменить этот строковый массив, чтобы он отражал любую необходимую вам структуру.

Вы можете использовать регулярные выражения или другие методы, но ничто не будет иметь производительность String.Split для этого случая использования.

1 голос
/ 04 мая 2011

Только для того, чтобы я вас правильно понял, вам нужно отсортировать их в:

1) массив только из символов 2) символ и число 3) только из чисел

Если это так, выможет сделать следующее:

1) Сначала попытаться проанализировать строку с Int32.Parse, если успешно сохранить в массиве чисел 2) Поймать исключение и сделать регулярное выражение для чисел для сортировки в оставшиеся 2 массива

Надеюсь, это поможет (: Ура!

1 голос
/ 04 мая 2011

Предполагается, что длина вашего массива кратна трем:

var values = str.Split(',')

string[,] result = new string[values .Length / 3, 3];
for(int i = 0; i < params.Length; i += 3)
{
    int rowIndex = i / 3;
    result[rowIndex, 0] = values [i];
    result[rowIndex, 1] = values [i + 1];
    result[rowIndex, 2] = values [i + 2];
}

Скомпилировано у меня в голове, но должно работать.

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