将字符数组转换为整数数组 c#

16

我有这个数组

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

我希望你能将其转换为int[]。

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

有什么想法吗?

我刚开始学编程

谢谢


3
你尝试过哪些方法来解决这个问题?这些尝试中出现了什么问题?你知道如何将一个“char”转换为相应的“int”值吗?你知道如何基于另一个数组的值创建一个新数组吗? - Servy
6个回答

37

1
我认为这是目前最好的解决方案,因为它非常容易一眼读懂和理解。它实际上是用简单易懂的英语写成的。 - Gray
你使用 Array.ConvertAll 而不是 Select(…).ToArray() 有什么原因吗?我问这个问题是因为后者似乎现在更流行(而且你的 lambda 表达式需要 C# 3)。 - Douglas
1
@Douglas:Array.ConvertAllSelect..ToArray 更高效,因为它预先分配了正确大小的数组并且不会进行任何调整大小操作。正如 Gray 已经提到的那样,它也更易读/明确。 - Tim Schmelter
@Douglas:而且,即使使用lambda表达式,它已经可以在.NET 2上运行了。 - Tim Schmelter
顺便说一句,如果有人想知道为什么 Char.GetNumericValue 返回的是 double 而不是 int(它不是一个单个数字吗?):https://dev59.com/W3E85IYBdhLWcg3wQxLG#2867132 - Tim Schmelter
显示剩余6条评论

11

要获取数字字符('0''9')的数值,您可以将其自身的代码点减去'0'的代码点。

int[] Aint = A.Select(a => a - '0').ToArray();
数字字符被分配连续的编码点。 '0' 的编码点为 48'1' 的编码点为 49,以此类推,直到 '9',它的编码点为 57。因此,当您从两个数字字符中减去时,您将获得与减去它们的数值相同的结果。从任何数字中减去 '0' 将给出后者的绝对值。

你需要在代码中包含 System.Linq 命名空间,因为使用了 Select 方法。你可以通过在代码顶部添加 using System.Linq 来实现。 - Marco Lackovic
@Krige:你说得对。当你创建一个新的类文件时,Visual Studio 2013会自动包含它。 - Douglas

6
添加 using System.Linq; 的 using 语句后,您可以执行以下操作:
int[] Aint = A.Select(i => Int32.Parse(i.ToString())).ToArray();

如果无法解析A中的元素,您将会收到一个异常。


简洁通常很好,但对于“刚开始编程”的人来说可能不太友好。 - H H
他没有要求特定的实现方式(for循环,while循环等),而我喜欢Linq,所以我就用它来实现了。 - Adam Modlin

4
请按照以下方式操作。
  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,解决方案中有小错误。 - Jordan

2
一点点LINQ就可以解决问题:
int[] Aint = A.Select(c => c - 48).ToArray(); // or c - '0'

0

你也可以这样做:

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

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


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