2016-05-31 4 views
1

Мне было интересно, как я мог преобразовать числа в строковое значение в int[]. У меня есть следующие номера, сохраненные в строке:Преобразование строки в int []

1,2,3,4 

Но мне было интересно, как я мог бы получить эти номера, сохраненные в int[] так каждое значение хранится в int массив.

+5

str.Split (','). Выберите (int.Parse) .ToArray() ;? –

+0

Пожалуйста, прочитайте это сообщение: http://stackoverflow.com/questions/1019793/how-can-i-convert-string-to-int –

ответ

5

Использование Linq:

string str = "1,2,3,4"; 
var result = str.Split(',').Select(c => Convert.ToInt32(c)).ToArray(); 

Это может быть еще проще с помощью method group:

var result = str.Split(',').Select(int.Parse).ToArray(); 

Кроме того, если вы не знаете больше о Linq, есть еще один способ с Array.ConvertAll метод, который преобразует массив из одного типа (массив строк после вызоваSplit()) в массив другого типа (int[]как вы хотите):

var result = Array.ConvertAll(str.Split(','), int.Parse); 
12

Попробуйте это:

string str = "1,2,3,4"; 
int[] array = str.Split(',').Select(x => int.Parse(x)).ToArray(); 

Если есть шанс, что вы могли бы иметь строку с двойными запятыми (например: 1,,2,3,4), то это будет работать лучше, так как за комментарий @Callum Linington в:

int[] array = str.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries) 
       .Select(int.Parse) 
       .ToArray(); 

Что выше код делает это:

  1. Создать массив строк после вызова Split() так после этого вызова метода мы будем иметь что-то вроде этого: { "1", "2", "3", "4"}
  2. Затем мы проходим каждый из этих строк в int.Parse(), который преобразует их в 32-разрядных целых чисел.
  3. Мы берем все эти целые числа и делаем массив из них с ToArray().
+1

Я всегда буду придерживаться там 'StringSplitOptions.RemoveEmptyEntries'. Но в любом случае это не дурацкий метод доказательства. –

+0

@CallumLinington Обновлен ответ. Спасибо за предложение. – Nasreddine

0

Вы можете использовать,

string str = "1,2,3,4"; 
var arr = str.Split(',').Select(int.Parse).ToArray() 
0
Int32.Parse(stringname) 

Или

Int32.TryParse(stringname,out outputvariable) 

Если разделенные запятой, то первый разделить их stringname.split(',') который будет возвращать массив строк и разобрать их по отдельности с помощью while петля.

1
bool isInt = true; 
string[] str = "1,2,3,4".Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); 
int counter = 0; 
List<int> parsedInts = new List<int>(str.Length); 

while(isInt && counter < str.Length) 
{ 
    int parsedInt; 
    isInt = int.TryParse(str[counter], out parsedInt); 
    counter++; 
    if (isInt) { 
     parsedInts.Add(parsedInt); 
    } 
} 

// then you can return the list as an array if you want 
parsedInts.ToArray(); 

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

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

Смежные вопросы