我是 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/