我有这个mainArray(动态生成):
static void Main()
{
var n = 3;
var k = 2;
var a = n * k;
var mainArray = new int[a];
var index = 0;
for (var i = 0; i < n; i++)
{
for (var j = 0; j < k; j++)
{
mainArray[index] = i;
index++;
}
}
//=> mainArray=[0,0,1,1,2,2]
// How to split this array in 3 uniq arrays, like:
//array1=[0,1]
//array2=[1,2]
//array3=[0,2]
Console.WriteLine(String.Join(",", mainArray));
Console.ReadLine();
}
mainArray = [0,0,1,1,2,2]
如何在3个uniq数组中拆分此数组,例如:
ARRAY1 = [0,1]
数组2 = [1,2]
ARRAY3 = [0,2]
我该怎么办?
答案 0 :(得分:1)
因此,最初您有一组n * k
项n
个不同的值,其中每个值重复k
次。并且您希望将这些n * k
项排列到k
集中,使得结果集中的每个值都是唯一的。
您可以通过以下方式执行此操作
int[][] res = Enumerable.Range(0, n).Select(x => new int[k]).ToArray();
for(int i = 0; i < n; i++)
for(int j = 0; j < k; j++)
res[i][j] = (i + j) % n;
答案 1 :(得分:0)
你的意思是说每个数组中的所有数组都必须有不同的数字,或者每个数组必须与其他数组不同?
如果您只想使用唯一数字制作数组,请尝试以下操作。我确信有更好的解决方案,但我相当肯定这可能适用于您的情况。
public static int[][] splitUnique(int[] input, int length)
{
if (input.Length % length != 0) throw new Exception("Length cannot yield full arrays of length " + length);
List<int> numbers = new List<int>(input);
int[][] data = new int[input.Length / length][];
int dataIndex = 0;
while (numbers.Count != 0)
{
int[] temp = new int[length];
int tempIndex = 0;
foreach (int num in numbers)
{
if (!temp.Contains(num))
{
temp[tempIndex] = num;
tempIndex++;
}
if (tempIndex >= length)
{
break;
}
}
foreach (int num in temp)
{
numbers.Remove(num);
}
data[dataIndex] = temp;
dataIndex++;
}
return data;
}