【发布时间】:2012-07-04 09:42:33
【问题描述】:
我正在研究减少 字母数字 List<char> 的值的逻辑。比如A10变成A9,BBA变成BAZ,123变成122。是的,如果输入的值是最后一个值(如 A 或 0),那么我应该返回 -
额外的开销是有一个由用户维护的List<char> 变量。它有要跳过的字符。例如,如果列表中包含 A,则值 GHB 应变为 GGZ 而不是 GHA。
这个逻辑的基础是减少char 的一个非常简单的用法,但是在这些条件下,我发现它非常困难。
我的项目是 Silverlight,语言是 C#。以下是我在 3 种方法中尝试执行的代码:
List<char> lstGetDecrName(List<char> lstVal)//entry point of the value that returns decreased value
{
List<char> lstTmp = lstVal;
subCheckEmpty(ref lstTmp);
switch (lstTmp.Count)
{
case 0:
lstTmp.Add('-');
return lstTmp;
case 1:
if (lstTmp[0] == '-')
{
return lstTmp;
}
break;
case 2:
if (lstTmp[1] == '0')
{
if (lstTmp[0] == '1')
{
lstTmp.Clear();
lstTmp.Add('9');
return lstTmp;
}
if (lstTmp[0] == 'A')
{
lstTmp.Clear();
lstTmp.Add('-');
return lstTmp;
}
}
if (lstTmp[1] == 'A')
{
if (lstTmp[0] == 'A')
{
lstTmp.Clear();
lstTmp.Add('Z');
return lstTmp;
}
}
break;
}
return lstGetDecrValue(lstTmp,lstVal);
}
List<char> lstGetDecrValue(List<char> lstTmp,List<char> lstVal)
{
List<char> lstValue = new List<char>();
switch (lstTmp.Last())
{
case 'A':
lstValue = lstGetDecrTemp('Z', lstTmp, lstVal);
break;
case 'a':
lstValue = lstGetDecrTemp('z', lstTmp, lstVal);
break;
case '0':
lstValue = lstGetDecrTemp('9', lstTmp, lstVal);
break;
default:
char tmp = (char)(lstTmp.Last() - 1);
lstTmp.RemoveAt(lstTmp.Count - 1);
lstTmp.Add(tmp);
lstValue = lstTmp;
break;
}
return lstValue;
}
List<char> lstGetDecrTemp(char chrTemp, List<char> lstTmp, List<char> lstVal)//shifting places eg unit to ten,etc.
{
if (lstTmp.Count == 1)
{
lstTmp.Clear();
lstTmp.Add('-');
return lstTmp;
}
lstTmp.RemoveAt(lstTmp.Count - 1);
lstVal = lstGetDecrName(lstTmp);
lstVal.Insert(lstVal.Count, chrTemp);
return lstVal;
}
我非常需要这方面的帮助。请帮我解决这个问题。
【问题讨论】:
-
+1:非常有趣的问题。在下面发布了一个有效的解决方案。提到了我的排除代码中有一个错误,但这应该很容易修复。
标签: c# silverlight logic