将char数组转换为int数组c#
Posted
技术标签:
【中文标题】将char数组转换为int数组c#【英文标题】:convert char array to int array c# 【发布时间】:2014-03-02 11:17:36 【问题描述】:我有这个数组
char[] A = ['1', '2', '3', '4']
我想将其转换为 int[]
int[] Aint=[1, 2, 3, 4]
有什么想法吗?
我刚开始编程
谢谢
【问题讨论】:
您自己做了哪些尝试来解决这个问题?你在这些尝试中遇到了什么问题?你知道如何将一个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.ConvertAll
和Char.GetNumericValue
:
int[] Aint = Array.ConvertAll(A, c => (int)Char.GetNumericValue(c));
【讨论】:
我认为这是迄今为止最好的解决方案,因为它非常易于阅读和理解。它实际上是用简单的英语写的。 您有什么理由使用Array.ConvertAll
而不是Select(…).ToArray()
?我之所以问,是因为后者现在似乎更流行了(而且你的 lambda 表达式无论如何都需要 C# 3)。
@Douglas: Array.ConvertAll
比Select..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();
这将选择所有字符数组作为字符串,将它们转换为数组,然后返回一个整数数组。
【讨论】:
以上是关于将char数组转换为int数组c#的主要内容,如果未能解决你的问题,请参考以下文章