2011-01-26 42 views

ответ

17

Что-то, как это будет работать, используя Linq:

string result = "12345" 
var intList = result.Select(digit => int.Parse(digit.ToString())); 

Это даст вам IEnumerable список Интс.

Если вы хотите IEnumerable строк:

var intList = result.Select(digit => digit.ToString()); 
+6

.Правый (.ToString) !? Смысл. Он ничего не делает. – dtb

+0

@ Рэнди, вы изменили свой ответ? Раньше это было правильно, теперь это неправильно. Это вернет 'IEnumerable'' string'. (Я только что изменил его) –

+3

@dtb, что такое путаница? 'digit' является символом' char', а 'int.Parse' принимает' string'. Следовательно: 'digit.ToString()'. –

7

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

Самый быстрый способ получить то, что вы хотите, вероятно, метод ToCharArray() из строки:

var myString = "12345"; 

var charArray = myString.ToCharArray(); //{'1','2','3','4','5'} 

Вы можете преобразовать каждый Чар в строку, или разобрать их в байтах или целых чисел. Вот Linq-й способ сделать это:

byte[] byteArray = myString.ToCharArray().Select(c=>byte.Parse(c.ToString())).ToArray(); 

Чуть более производительным, если вы используете строки ASCII/Unicode:

byte[] byteArray = myString.ToCharArray().Select(c=>(byte)c - 30).ToArray(); 

Этот код будет работать только если вы уверены, что каждый element - число; В противном случае синтаксический разбор выдаст исключение. Простое Regex, которое проверит это, верно, это «^ \ d + $» (соответствует полной строке, состоящей из одного или нескольких цифровых символов), используемой в статическом методе Regex.IsMatch().

1

Вот какой-то код, который может вам помочь. Строки можно рассматривать как массив символов

string numbers = "12345"; 
int[] intArray = new int[numbers.Length]; 
for (int i=0; i < numbers.Length; i++) 
{ 
    intArray[i] = int.Parse(numbers[i]); 
} 
+0

Вторая строка дает ошибку. Не включайте '[i]' с 'числами'. –

5

Вы можете просто сделать:

"123456".Select(q => new string(q,1)).ToArray(); 

иметь перечислимого целых чисел, согласно комментарию запросу, вы можете:

"123456".Select(q => int.Parse(new string(q,1))).ToArray(); 

Он немного слаб, так как предполагает, что строка содержит числа.

+0

Не возвращает что-то из 'IEnumerable ' (или эквивалент). –

33

Я бы использовал модуль и петлю.

int[] GetIntArray(int num) 
{ 
    List<int> listOfInts = new List<int>(); 
    while(num > 0) 
    { 
     listOfInts.Add(num % 10); 
     num = num/10; 
    } 
    listOfInts.Reverse(); 
    return listOfInts.ToArray(); 
} 
+0

Это хороший способ сделать это. Но это исключает начальный нуль, т. Е. ** 0 ** 123. В случае, если мне требуется запуск ** 0 **. Как это сделать? –

+2

@SaimMehmoodне является номером –

+0

0 является номером, но он будет исключен :) do ... while будет делать трюк – Tommy

1

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

string no = "12345"; 
string [] numberArray = new string[no.Length]; 
int counter = 0; 

    for (int i = 0; i < no.Length; i++) 
    { 
    numberArray[i] = no.Substring(counter, 1); // 1 is split length 
    counter++; 
    } 

Console.WriteLine(string.Join(" ", numberArray)); //output >>> 0 1 2 3 4 5 
Смежные вопросы