2014-01-13 6 views
-9

Его похоже, что эта функция возвращает номер первого массива, но у не знаю, если это является концепцияЧто делает эта функция?

public int w(int[] arr) 
{ 
    int c = 1; 

    for (int i = 1; i < arr.Length; i++) 
    { 
     bool u = true; 

     for (int j = 0; (j < i) && u; j++) 
     { 
      if (arr[i] == arr[j]) 
       u = false; 
     } 

     if (u) 
     { 
      c++; 
     }     
    } 

    return c; 
} 
+2

Он рассчитывает все уникальные элементы в массиве. –

+5

Значит, люди пишут предварительный обфускационный код в эти дни? –

+0

выглядит как декомпиляция обфускации .net assembly – bansi

ответ

1

Эта функция подсчитывает все отдельные элементы массива.

Внешний контур пересекает все элементы массива. Внутренний цикл петли над массивом до элемента внешнего цикла. Счет увеличивается, если нет предшествующего элемента, который аналогичен текущему элементу.

К примеру, учитывая массив

[1, 2, 3, 4, 3, 1, 5] 

Значение c будет

1, 2, 3, 4, 4, 4, 5 

поэтому результат 5, что число различных элементов в массиве.

+1

Нет, количество 'уникальных' элементов в вашем случае равно 4. Количество элементов' distinct' в вашем случае это 5. – Abbas

+1

@Abbas спасибо, я переформулировал. –

0

Как объясняется Heuster, эта функция возвращает различное количество элементов в массиве. Эта функция дает тот же результат, как следующий Linq-выражение:

var myIntegers = new int[] { 1, 2, 3, 4, 3, 1, 5 }; 
var distinctCount = myIntegers.Distinct().Count(); 
//distinctCount is '5' 

Больше чтение:

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