我有个问题
A = 10
B = 11
C = 12
D = 13
我有一个字符数组 “5623ADCB”
我想找到最大值 D = 13,但是当我使用 for 循环查找最大值时程序无法识别 D = 13。相反,它输出 D 的 ascii 值,我如何确保每次遇到 D 时,它都会被识别为 13 而不是它的 ascii 值?
谢谢大家的帮助
最佳答案
功能配方:制作一个从 Char 到 Int 的映射 - 使用 Max
:
static int Map(char c)
{
return Int32.Parse (c.ToString(), System.Globalization.NumberStyles.HexNumber);
}
var max = "5623ADCB".Select (Map).Max ();
在这种情况下得到你 13
;)
如果您关心内存和性能,这里有一个版本:
static int FindMax(string s)
{
s = s.ToUpper ();
var max = 0;
for (int i = 0; i < s.Length; i++) {
var v = Map (s [i]);
if (v > max)
max = v;
}
return max;
}
static int Map(char c)
{
if (c >= '0' && c <= '9')
return (int)c - (int)'0';
if (c >= 'A' && c <= 'E')
return (int)c - (int)'A' + 10;
throw new ArgumentOutOfRangeException ();
}
顺便说一句:如果您希望 D
为 13,我不知道为什么要使用 14
- 如果第一个是打字错误,那么您必须更改 上面的 Map
函数(如果你不想花哨的话,一个 switch
就可以了)——因为你的第一个定义与你从 Hex 中假设的完全一样,所以我接受了它。
关于c# - 查找数组中的最大值但是为字符分配了数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32677354/