【发布时间】:2018-05-09 09:56:22
【问题描述】:
我正在使用 SAP Idocs,它的段可以包含成本中心参考范围。范围作为字符串的开始值和结束值给出。要将这些值存储在我的数据库中,我需要生成这些值之间存在的所有可能组合。
字符串是字母数字的,比如开始:D98C1 和结束:D9AZ3。单个字符序列首先是从 0 到 9 的数字,然后是从 A 到 Z 的字母。扩展需要在开始和结束之间生成所有可能的组合,比如说开始:A1 到结束:CA 将包含值@ 987654325@ to A9, AA to AZ, B0 to B9, BA to BZ, C0 to C9 and @987644
我完全坚持这一点,并且非常感谢一些关于如何实现它的指针。
编辑:
作为一个人,我会首先找到开始字符串和结束字符串之间不同的部分。我能做到,这很容易。所以对于上面的例子,那就是D9。然后我会一次遍历一个字符的起始字符串的可变部分,并改变字符串末尾的所有字符,遍历所有可能的字符,直到我到达结束字符串中的相应字符。
我只是被困住了。
我一开始是这样的:
readonly static char[] values = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToArray();
static void Main(string[] args)
{
string from = "D3A0";
string to = "D3AC";
string root = new string(from.TakeWhile((c, i) => to.Length >= i && to[i] == c).ToArray());
string from1 = from.Substring(root.Length);
string to1 = to.Substring(root.Length);
var output = new List<string>();
for (int i = from1.Length - 1; i == 0; i--)
{
char startChar = from1[i];
char endChar = to1[i];
var remainingValues = values.SkipWhile(v => v != startChar)
.TakeWhile(v => v != endChar)
.ToList();
foreach (char v in remainingValues)
{
string currentValue = from1.Remove(i) + v;
output.Add(currentValue);
}
if (output.Contains(to1))
{
break;
}
}
foreach (var s in output.Select(o => root + o))
{
Console.WriteLine(s);
}
}
但它并不提供所有组合。
【问题讨论】:
-
感谢您的反对。我能解释一下吗?
-
我实际上,真的坚持实施这一点,希望能得到一些帮助。我认为这就是 SO 的用途......
-
那么你尝试了什么,你卡在哪里了?你可以做什么?你有什么问题?你能把“A”变成“B”变成“C”吗?
-
我说了这么多。我实际上完全不知道如何实现这一点。我可以改变一个字符,但不能生成所有可能的字符。
-
总是从你作为一个人的方式开始。