2016-01-24 2 views
0

Я ищу лучший способ получить все возможные int массивы длины n из массива int длины k, включая опцию для n-1 элементов, которые должны быть пустыми. , например, у меня есть массив с 5 элементов (к = 5) и я хочу все комбинации 3 (п = 3)Получить все группы на n из массива длины k

int[] numbers = new int[5] {1, 2, 3, 4, 5}; 

и возможный суб массивы длины 3:

{1, null, null}, {1, null, 2}, {1,2, null} ..... и так далее.

Какой был бы лучший способ сделать это? Matan

+0

В настоящее время я не знаю об этом, пытаясь получить как можно больше информации из Интернета о лучшем способе справиться с этим. Я нашел несколько хороших алгоритмов, но он не включает нулевые возможности. –

+0

Взгляните на это решение: http://stackoverflow.com/a/10630026. Он даст вам все перестановки без значений «null». В этом примере замените 'Enumerable.Range (1, 3)' вашей переменной 'numbers'. – Serge

+0

Спасибо, это хорошо, но мне нужны нулевые опции в моей потребности. –

ответ

0

Вы можете включить null в свой массив чисел. Этот код создает все возможные перестановки, за исключением {null, null, null}.

var numbers = new int?[]{null, 1, 2, 3, 4, 5}; 
var result = new List<int?[]>(); 

foreach (int? x in numbers) 
{ 
    foreach (int? y in numbers) 
    { 
     foreach (int? z in numbers) 
     { 
      if (x == null && y == null && z == null) 
       continue; 

      result.Add(new int?[] { x, y, z }); 
      Console.WriteLine("x: {0} - y: {1} - z: {2}", x, y, z); 
     } 
    } 
} 
+0

кажется хорошим, я попробую –

Смежные вопросы