Преобразование строки [] в Int [] без потери начальных нулей
Ввод:
string param = "1100,1110,0110,0001";
Вывод:
int[] matrix = new[]
{
1,1,0,0,
1,1,1,0,
0,1,1,0,
0,0,0,1
};
Что я сделал?
Прежде всего, я разделил строку на строку [].
string[] resultantArray = param.Split(',');
Создан один метод, где я передал свою строку [].
var intArray = toIntArray(resultantArray);
static private int[] toIntArray(string[] strArray)
{
int[] intArray = new int[strArray.Length];
for (int i = 0; i < strArray.Length; i++)
{
intArray[i] = int.Parse(strArray[i]);
}
return intArray;
}
Проблема
Я пробовал много решений SO, но никто из них не помог мне.
Завершен с массивом без начальных нулей.
Ответы
Ответ 1
- определить все цифры:
.Where(char.IsDigit)
- преобразуйте выбранные
char
-digits в integer
: .Select(x => x-'0')
(это не так красиво, как int.Parse
или Convert.ToInt32
, но оно очень быстро)
код:
string param = "1100,1110,0110,0001";
int[] result = param.Where(char.IsDigit).Select(x => x-'0').ToArray();
Как прокомментировал CodesInChaos, это может привести к ошибке, если есть другой тип цифр внутри вашего ввода, например, например. Тайские цифры: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' где char.IsDigit == true
- если вам нужно обрабатывать такие специальные случаи, вы можете разрешить только 0
и 1
в вашем результате .Where("01".Contains)
Ответ 2
Вы также можете удалить запятые и преобразовать результат по-следующему, используя Linq.
string param = "1100,1110,0110,0001";
int[] result = param.Replace(",", "").Select(c => (int)Char.GetNumericValue(c)).ToArray();
Ответ 3
еще один способ сделать это
static private IEnumerable<int> toIntArray(string[] strArray)
{
foreach (string str in strArray)
{
foreach (char c in str)
{
yield return (int)char.GetNumericValue(c);
}
}
}
Ответ 4
Как насчет этого?
string input = "1100,1110,0110,0001";
var result = input
.Split(',')
.Select(e => e.ToCharArray()
.Select(f => int.Parse(f.ToString())).ToArray())
.ToArray();
Ответ 5
string[] s=param.split(',');
Char[] c;
foreach(string i in s){
c+=i.ToCharArray()
}
int[] myintarray;
int j=0;
foreach(char i in c){
myintarray[j]=(int)i;
j++
}