【问题标题】:Convert an array of chars to an array of integers将字符数组转换为整数数组
【发布时间】:2013-11-11 13:20:09
【问题描述】:

我有这些数组

char[] array = {'1', '2', '3', '4'};
int[] sequence = new int[array.Length];  

有没有一种简单的方法可以将array 中的数字分配给sequence

我试过了

for (int i = 0; i < array.Length; i++)
{
    seqence[i] = Convert.ToInt32(array[i]);
}

但我得到的是 1、2、3、4 的 ASCII 编码,而不是数字本身。

【问题讨论】:

  • 尝试将字符串中的数字从“1”更改为“1”,依此类推。这应该改变它,以便它们变为整数。
  • But I get the ASCII coding of 1,2,3,4 not the numbers themselves。实际上,你得到的是 Unicode 字符的 32 位有符号整数。

标签: c# arrays char int type-conversion


【解决方案1】:

遍历您的 char 数组并使用下一个转换:

char[] charArray = { '1', '2', '3', '4' };

int[] intArray= new int[charArray .Length];

for (int i = 0; i < charArray .Length; i++)
{
    intArray[i] = (int)Char.GetNumericValue(charArray[i]);   

}

【讨论】:

    【解决方案2】:
    using System.Linq;
    
    char[] array = { '1', '2', '3', '4' };
    var ints = array.Select(x => int.Parse(x.ToString()));
    

    【讨论】:

      【解决方案3】:

      在转换为整数之前尝试将您的 Char 值转换为字符串:

      for (int i = 0; i < arr.Length; i++)
      {
        sequence[i] = Convert.ToInt32(array[i].ToString());
      }
      

      【讨论】:

        【解决方案4】:

        只需先将char 转换为string

        for (int i = 0; i < array.Length; i++)
        {
             sequence[i] = Convert.ToInt32(array[i].ToString());
        }
        

        当然,您可以在一个 linq 查询中完成所有这些操作:

        char[] array = {'1', '2', '3', '4'};
        int[] sequence = array.Select(c => Convert.ToInt32(c.ToString())).ToArray();
        

        【讨论】:

          【解决方案5】:

          试试这个:

          char[] array = { '1', '2', '3', '4' };
          
          int[] sequence = new int[array.Length];
          
          for (int i = 0; i < array.Length; i++)
          {
              sequence[i] = int.Parse(array[i].ToString());
          }
          

          【讨论】:

            【解决方案6】:

            使用这个:

            for (int i = 0; i < array.Length; i++)
            {
                sequence[i] = array[i] - '0';
            }
            

            这里有很多正确的答案,但是(除非你想使用不安全的代码)这是最快的,而且它不使用额外的内存。

            【讨论】:

              【解决方案7】:

              如果您先将每个字符转换为字符串,然后使用int.Parse(或仍然是Convert.ToInt32)会起作用。

              我个人会为此使用 LINQ,例如

              int[] sequence = array.Select(x => int.Parse(x.ToString())).ToArray();
              

              ...如果您对List&lt;int&gt; 也同样满意,请使用ToList

              如果您想按照另一个答案中的建议使用 Char.GetNumericValue,您也可以将其与 LINQ 一起使用:

              int[] sequence = array.Select(x => (int) char.GetNumericValue(x)).ToArray();
              

              请注意,转换为 int 是必需的,因为 char.GetNumericValue 返回 double。 (例如“a half”等值的 Unicode 字符。)

              或者,如果您绝对确定您将使用 ASCII 数字,则可以使用快速而肮脏的:

              int[] sequence = array.Select(x => x - '0').ToArray();
              

              【讨论】:

                【解决方案8】:

                您可以使用Enumerable.Range 来实现这一点。它生成从 - 到的连续数字序列。

                只是一个例子:

                 IEnumerable<int> squares = Enumerable.Range(1, 10)
                

                如果原始 char 数组只是 char 中的连续数字序列,则属于这种情况。

                如果数组是任意顺序和顺序的主题,只需使用正确的转换:

                array.Select(x => int.Parse(x.ToString()))
                

                【讨论】:

                  【解决方案9】:

                  试试

                  for (int i = 0; i < arr.Length; i++)
                   {
                       seqence[i] = (int)Char.GetNumericValue(array[i]);
                   }
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2019-04-21
                    相关资源
                    最近更新 更多