2016-03-05 208 views
1

我在本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

[0,0] [1,1],[2,2] =不uniq的; [0,1],[0,1] [2,2] =不是uniq; ,唯一的可能性是我的問題; –

回答

1

所以最初你有一組n * k項目,其中每個值重複kn不同的值。並且您希望以這樣的方式將這些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; 
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; 
    }