C# 加权置换算法
小组: 我正在构建一个能够感知上下文的业务规则引擎——但它是加权的——或者换句话说,每个业务规则都有一个由键的段定义的粒度级别。这些段不是组合的,因为它们不能按任何顺序加权,而是像组合锁一样可置换(有趣的是,命名不当,但被广泛接受) 但是,为了减少提供业务规则所需的代码量,我们只构建了排除文件,这意味着每个段可能最终都有一个特定的键值或全部键值 所以,既然我们有一个抽象的背景,让我们举一个具体的例子。定义的分段如下所示:C# 加权置换算法,c#,.net,algorithm,C#,.net,Algorithm,小组: 我正在构建一个能够感知上下文的业务规则引擎——但它是加权的——或者换句话说,每个业务规则都有一个由键的段定义的粒度级别。这些段不是组合的,因为它们不能按任何顺序加权,而是像组合锁一样可置换(有趣的是,命名不当,但被广泛接受) 但是,为了减少提供业务规则所需的代码量,我们只构建了排除文件,这意味着每个段可能最终都有一个特定的键值或全部键值 所以,既然我们有一个抽象的背景,让我们举一个具体的例子。定义的分段如下所示: 业务线(LOB) 公司 陈述 现在,让我们假设这个例子的LOB是ABC,C
- ABCúGúWY
- 全部
- ABC_ALL_WY
- 全部
- 好的
- 全部
- 全部
- 全部
publicstaticvoidmain(字符串[]args)
public static void Main(string[] args)
{
List<string> inputValues = new List<string>() { "ABC", "G", "WY" };
List<string> results = new List<string>();
int permutations = (int)Math.Pow(2.0, (double)inputValues.Count);
for (int i = 0; i < permutations; i++)
{
int mask = 1;
Stack<string> lineValues = new Stack<string>();
for (int j = inputValues.Count-1; j >= 0; j--, mask <<= 1)
{
if ((i & mask) == 0)
{
lineValues.Push(inputValues[j]);
}
else
{
lineValues.Push("ALL");
}
}
results.Add(string.Join("_", lineValues.ToArray())); //ToArray can go away in 4.0(?) I've been told. I'm still on 3.5
}
foreach (string s in results)
{
Console.WriteLine(s);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey(true);
}
{
列表输入值=新列表(){“ABC”、“G”、“WY”};
列表结果=新列表();
int置换=(int)Math.Pow(2.0,(double)inputValues.Count);
for(int i=0;i<置换;i++)
{
int-mask=1;
Stack lineValues=新堆栈();
对于(int j=inputValues.Count-1;j>=0;j-,mask如果我答对了问题,您应该:
-Generate all binary strings of length N (there will be 2^N of them)
-sort them by number of bits set
-generate rules. Rule has 'ALL' in position i, if bit number i in the corresponding binary string is set
只有三个部分吗?还有,你能发布到目前为止你有什么东西,让我们知道你被困在哪里吗?你不应该把你的团队领导的电子邮件直接复制到so中。如果他们也读了怎么办?@AntonTykhyy-我想我不明白你在说什么。这不是我的团队领导写的。@JasonWilliams-可能不止三个,只是在这个例子中只有三个。我想在这个答案上+1你,但我不能,因为我还没有足够的分数。我会尽快。