c# - 数组有字符串值,我想要一个整数

标签 c# arrays algorithm math radix

我是 C# 编程的新手,我几乎所有的信息都来自: http://unity3d.com/learn/tutorials/modules/beginner/scripting 、youtube、此站点以及通过 google 找到的许多编程教程站点。

在我在 Unity 中的单行为代码中,我最终试图制作一个以 12 为基数的计算器。 为此,我需要 12 个数字,我写了一个字符串数组来表示它们:

private string[] numerals = {"0","1","2","3","4","5","6","7","8","9","X","E"};
public string thisNum;

我的 Start 和 calcNum 函数:

void Start ()
{
    thisNum = numerals[10];
    calcNum ();
}
void calcNum ()
{
    print(thisNum);
}

太棒了,我可以输入:print (thisNum);,然后返回 X

但是,我如何获得:print (thisNum + thisNum) 以返回 18

我知道它不是整数,因此它不能将 2 个字符串相加得到一个总和,而是得到:XX

那么,我如何将 X 表示为这么多:

啊啊啊啊啊啊啊啊啊

不仅仅是字母 X。我现在大约重置了这个项目 6 次。

我在考虑 for 循环或 if (X) than 10,但是,我最终总是使用以 10 为底的数字来表示数字,这有点蹩脚。

我只需要一点点插入就可以朝着正确的方向前进,非常感谢您的帮助,

谢谢。

最佳答案

这可能会有所帮助。

从字符数组而不是字符串开始。

var numerals = new []
{
    '0', '1', '2', '3', '4', '5',
    '6', '7', '8', '9', 'X', 'E',
};

创建几个字典以返回每个数字的基数 10 值并执行反向查找。

var nis =
    numerals
        .Select((n, i) => new { n, i })
        .ToArray();

var n2i = nis.ToDictionary(_ => _.n, _ => _.i);
var i2n = nis.ToDictionary(_ => _.i, _ => _.n);

然后要在 base 10 和 base 12 之间进行转换,您需要几个辅助函数。

Func<int, IEnumerable<char>> getReversedNumerals = null;
getReversedNumerals = n =>
{
    IEnumerable<char> results =
        new [] { i2n[n % 12], };
    var n2 = n / 12;
    if (n2 > 0)
    {
        results = results.Concat(getReversedNumerals(n2));
    }
    return results;
};

Func<IEnumerable<char>, int, int> processReversedNumerals = null;
processReversedNumerals = (cs, x) =>
    cs.Any()
        ? x * n2i[cs.First()]
            + processReversedNumerals(cs.Skip(1), x * 12)
        : 0;

现在您可以根据助手定义转换函数。

Func<int, string> convertToBase12 =
    n => new String(getReversedNumerals(n).Reverse().ToArray());

Func<string, int> convertToBase10 =
    t => processReversedNumerals(t.ToCharArray().Reverse(), 1);

最后您可以执行转换:

var b10 = convertToBase10("3EX2"); //6890
var b12 = convertToBase12(6890); //3EX2

关于c# - 数组有字符串值,我想要一个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26291410/

相关文章:

algorithm - 将排序的双向链表转换为 BST

arrays - 寻找最大的排序选择

c# - String 类中的线程安全

java - 用单个数字排列的简单数字

javascript - 如何在javascript中获取json数组中的重复对象

c# - 图像变量到 byte[] 数组

algorithm - MATLAB:提高逻辑语句中的代码效率(Metropolis 方法)

c# - 在 C# 中刷新 Excel 工作表

c# - NHibernate 如何确定是插入还是更新记录?

c# - 找不到 MVC 4 SimpleMembership HasLocalAccount 方法