C# 如何在唯一数组中动态拆分数组

C# 如何在唯一数组中动态拆分数组,c#,C#,我有这个主阵列(动态生成): static void Main() { var n=3; var k=2; var a=n*k; var mainArray=newint[a]; var指数=0; 对于(变量i=0;i=长度) { 打破 } } foreach(温度中的int num) { 删除(num); } 数据[数据索引]=温度; dataIndex++; } 返回数据; } 因此,最初您有一组n*k项,其中每个值重复k次。您希望将这些n*k项排列到k集合中,这样得到的集合中的每个值都是唯

我有这个主阵列(动态生成):

static void Main()
{
var n=3;
var k=2;
var a=n*k;
var mainArray=newint[a];
var指数=0;
对于(变量i=0;imainArray=[0,0,1,1,2,2]
//如何将此阵列拆分为3个uniq阵列,如:
//数组1=[0,1]
//array2=[1,2]
//阵列3=[0,2]
Console.WriteLine(String.Join(“,”,mainArray));
Console.ReadLine();
}
mainArray=[0,0,1,1,2,2]

如何将此阵列拆分为3个uniq阵列,如:

数组1=[0,1]

array2=[1,2]

阵列3=[0,2]


我怎么做

您的意思是说所有数组在每个数组中都必须有不同的数字,还是说每个数组必须是唯一的

如果只想创建具有唯一编号的数组,请尝试以下操作。我相信有更好的解决办法,但我相当肯定这对你的情况可能有用

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;
    }
public static int[]splitUnique(int[]input,int length)
{
如果(input.Length%Length!=0)抛出新异常(“Length无法生成完整的Length数组”+Length);
列表编号=新列表(输入);
int[][]数据=新int[input.Length/Length][];
int-dataIndex=0;
while(number.Count!=0)
{
int[]temp=新的int[长度];
int tempIndex=0;
foreach(整数)
{
如果(!temp.Contains(num))
{
temp[tempIndex]=num;
tempIndex++;
}
如果(tempIndex>=长度)
{
打破
}
}
foreach(温度中的int num)
{
删除(num);
}
数据[数据索引]=温度;
dataIndex++;
}
返回数据;
}

因此,最初您有一组
n*k
项,其中每个值重复
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;
int[]res=Enumerable.Range(0,n)。选择(x=>newint[k]).ToArray();
对于(int i=0;i
[0,0][1,1],[2,2]=非uniq;[0,1],[0,1][2,2]=非uniq,唯一的唯一可能性是我的问题中的可能性;
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;