将string []转换为Int []而不会丢失前导零

Bha*_*rat 13 c#

输入:

string param = "1100,1110,0110,0001";
Run Code Online (Sandbox Code Playgroud)

输出:

int[] matrix = new[]
    {
              1,1,0,0,
              1,1,1,0,
              0,1,1,0,
              0,0,0,1
    };
Run Code Online (Sandbox Code Playgroud)

我做了什么?

首先,我将字符串拆分为字符串[].

string[] resultantArray = param.Split(',');
Run Code Online (Sandbox Code Playgroud)

创建了一个方法,我传递了我的字符串[].

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;
}
Run Code Online (Sandbox Code Playgroud)

问题?

我尝试了许多SO的解决方案,但没有一个能帮助我.

结束没有前导零的数组.

fub*_*ubo 19

  • 确定所有数字: .Where(char.IsDigit)
  • 所选择的转换char-digits为integer:.Select(x => x-'0')(这是不是漂亮int.ParseConvert.ToInt32但它的超快速)

码:

string param = "1100,1110,0110,0001";
int[] result = param.Where(char.IsDigit).Select(x => x-'0').ToArray();
Run Code Online (Sandbox Code Playgroud)

正如CodesInChaos评论的那样,如果输入中存在其他类型的数字,例如泰语数字字符,则可能会导致错误:' 0''1''2''3''4''5''6''7 ' "8""9",其中char.IsDigit == true-如果你需要处理这种特殊情况下,您可以只允许01在结果.Where("01".Contains)


Cod*_*dor 5

您还可以删除逗号并使用Linq按字符顺序转换结果.

string param = "1100,1110,0110,0001";
int[] result = param.Replace(",", "").Select(c => (int)Char.GetNumericValue(c)).ToArray();
Run Code Online (Sandbox Code Playgroud)

  • 将字符转换为int将返回字符的ascii值 (2认同)
  • Char.GetNumericValue返回一个double,所以要么将结果更改为double [],要么添加(int)强制转换 (2认同)