c# - 查找数组中的最大值但是为字符分配了数字

标签 c# arrays

我有个问题

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/

相关文章:

c++ - memcpy 期间出现 ConnectThread 错误

javascript - 正在处理 JS 作业(函数、数组等)——有几个问题

javascript - 按两个键对对象数组进行排序和分组,并使用新键创建分组项数组

c# - 如何在 C# 中随机化种子

c# - 如何从mysql日期时间字段中读取

c# - button.click 事件发生时如何获取按钮名称/标签?

javascript - 根据外部ID在javascript中对数组进行排序

c - char* 究竟定义了什么?如果它定义了一个字符串数组,我如何输出单个元素?

c# - 使用 Linq to Entities 的存储函数

c# - 如何在 Entity Framework 项目中将表数据转换为Excel格式?