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

13

输入:

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(',');
创建了一个方法,其中我传递了我的string[]。
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;
}

问题?

我尝试了stackoverflow上的许多解决方案,但它们都没有帮助到我。

最终得到了一个没有前导零的数组。


你想要一个有4x4=16个元素的一维数组,对吗? - Willem Van Onsem
是的,就是这样。但要带前导零。 - Bharat
3
但是在你的代码中,你构建了一个只有四个元素的一维数组。 - Willem Van Onsem
2
可能是C#将int转换为带有填充零的字符串?的重复问题。 - logixologist
1
你正在逗号上进行分割,这会给你四个带有“1”和“0”的字符串。为了使你的函数按照它的方式工作,你需要一个包含十六个带有“1”或“0”的字符串的数组:resultantArray = string.Join("", param.Split(',')).Select(x => x.ToString()).ToArray() - BurnsBA
显示剩余2条评论
5个回答

19
  • 确定所有数字:.Where(char.IsDigit)
  • 将选定的char-数字转换为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();

正如CodesInChaos所评论的那样,如果您的输入中存在其他类型的数字,例如泰国数字字符:'๐'' ๑'' ๒'' ๓'' ๔'' ๕'' ๖'' ๗'' ๘'' ๙',那么这可能会导致错误,其中char.IsDigit == true - 如果您需要处理这种特殊情况,您可以在您的结果.Where("01".Contains)中只允许01


5
您可以使用 Linq 将逗号删除并按字符转换结果,具体操作如下。
string param = "1100,1110,0110,0001";
int[] result = param.Replace(",", "").Select(c => (int)Char.GetNumericValue(c)).ToArray();

2
将字符转换为整数将返回该字符的ASCII值。 - Innat3
2
Char.GetNumericValue返回一个double,因此要么将结果更改为double [],要么添加(int)强制转换。 - Innat3

3

另一种实现此操作的方法

static private IEnumerable<int> toIntArray(string[] strArray)
{
    foreach (string str in strArray)
    {
        foreach (char c in str)
        {
            yield return (int)char.GetNumericValue(c);
        }
    }
}

2
这个怎么样?
        string input = "1100,1110,0110,0001";

        var result = input
            .Split(',')
            .Select(e => e.ToCharArray()
                .Select(f => int.Parse(f.ToString())).ToArray())
            .ToArray();

1
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++
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接