我正在取消c#..
我有一个数组,可以增长到 30 个。
char[][] myArray = new char[][]{
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' },
new char[] { '3', '2', '1' }
};
想要创建格式的所有组合
“3333333333333333 3333333333333332 3333333333333331 3333333333333323 3333333333333322 3333333333333321 3333333333333313 3333333333333312 3333333333333311 3333333333333233 3333333333333232 …………”
我应用了两种方法,第一:
var data=myArray.Aggregate((IEnumerable<string>)new[] { string.Empty }, (e, d) => e.SelectMany(_ => d, (a, b) => a + b)).ToList();
File.AppendAllText(@$"C:\test.txt", (String.Join(Environment.NewLine,data)));
在这个方法中,只要数组计数为 16,就可以非常快地生成序列。超过 16,我会遇到内存问题。
第二种方法是
var positions = from list1 in mainList
from list2 in mainList
from list3 in mainList
from list4 in mainList
......
select new
{
list1,
list2,
list3,
....
然后使用 32 个线程的并行 for 循环。 在第二种方法中,运行超过 24 小时后,循环仍在运行。
是否有另一种方法可以更快地完成此操作,而不会遇到内存问题......
基本上有 1、2 和 3 作为可能值。所以它们看起来很像数字。让我们创建一个初始数组来将状态存储在某处:
char[] myArray = new char[]{
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
'1',
};
让我们创建一个值数组:
char[] values = new char[] {'1', '2', '3'};
现在,让我们循环一下:
bool ended = false;
while (!ended) {
bool done = false;
int index = myArray.Length - 1;
while ((!done) && (index >= 0)) {
int valueIndex = values.IndexOf(myArray[index]);
valueIndex = (valueIndex + 1) % values.Length;
if ((valueIndex == 0) && (index == 0)) {
ended = true;
done = true;
} else {
myArray[index] = values[valueIndex];
if (valueIndex == 0) {
index--;
} else {
done = true;
//output current state in the way you like
}
}
}
}
我们基本上是在“递增”一个 3 基数,其中数组元素代表数字。