【问题标题】:convert char array to int array c#将char数组转换为int数组c#
【发布时间】:2014-03-02 11:17:36
【问题描述】:

我有这个数组

char[] A = ['1', '2', '3', '4']

我想将其转换为 int[]

int[] Aint=[1, 2, 3, 4]

有什么想法吗?

我刚开始编程

谢谢

【问题讨论】:

  • 您自己做了哪些尝试来解决这个问题?你在这些尝试中遇到了什么问题?你知道如何将一个char 转换成它对应的int 值吗?你知道如何根据另一个数组的值创建一个新数组吗?

标签: c# arrays char int


【解决方案1】:

using System.Linq; 添加 using 语句,然后您可以执行以下操作:

int[] Aint = A.Select(i => Int32.Parse(i.ToString())).ToArray();

如果无法解析A 中的元素,则会出现异常。

【讨论】:

  • 简洁通常是好的,但对于“刚开始编程”的人来说不是那么好。
  • 好吧,他没有要求具体的实现(for循环、while循环等),我喜欢Linq,所以我就是这样实现的。
【解决方案2】:

要获得数字字符的数值('0''9'),您可以简单地从其自身中减去 '0' 的代码点。

int[] Aint = A.Select(a => a - '0').ToArray();

数字字符被分配连续的代码点。 '0' 具有代码点 48'1' 具有代码点 49;依此类推,直到'9',其代码点为57。因此,当您减去两位数字字符时,您将得到与减去它们的数值相同的结果。从任何数字中减去'0' 将得到后者的绝对值。

【讨论】:

  • 由于使用了 Select 方法,您需要在代码中包含 System.Linq 命名空间。您可以通过在代码顶部添加 using System.Linq 来做到这一点。
  • @Krige:你是对的。当您创建新的类文件时,Visual Studio 2013 会自动为您包含它。
【解决方案3】:

一点点 Linq 就可以解决问题:

int[] Aint = A.Select(c => c - 48).ToArray(); // or c - '0'

【讨论】:

    【解决方案4】:

    另一个选项,使用Array.ConvertAllChar.GetNumericValue

    int[] Aint = Array.ConvertAll(A, c => (int)Char.GetNumericValue(c));
    

    【讨论】:

    • 我认为这是迄今为止最好的解决方案,因为它非常易于阅读和理解。它实际上是用简单的英语写的。
    • 您有什么理由使用Array.ConvertAll 而不是Select(…).ToArray()?我之所以问,是因为后者现在似乎更流行了(而且你的 lambda 表达式无论如何都需要 C# 3)。
    • @Douglas: Array.ConvertAllSelect..ToArray 更有效,因为它预先分配了一个大小正确的数组并且不进行任何调整大小。正如 Gray 已经提到的那样,它也是可读/明确的。
    • @Douglas:此外,它已经与 .NET 2 一起工作,即使是 lambda。
    • @TimSchmelter:是的,我同意它在这方面更有效。提到 C# 3,我的意思是它需要与 LINQ 相同版本的 C#(和 .NET)。
    【解决方案5】:

    请这样做

      char[] A = {'1', '2', '3', '4'};
      int[] Aint = new int[A.Length];      
      for (int i = 0;i < A.Length;i++)
      {
          Aint[i] = Convert.ToInt32(A[i].ToString()); 
      }
    

    【讨论】:

    • Convert.ToInt32,解决方案中的小错误。
    【解决方案6】:

    你也可以这样做:

    int[] Aint = A.Select(c => Convert.ToInt32(c.ToString())).ToArray();
    

    这将选择所有字符数组作为字符串,将它们转换为数组,然后返回一个整数数组。

    【讨论】:

      猜你喜欢
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      相关资源
      最近更新 更多