2015-02-02 3 views
1

У меня есть кусок кода в SWIFT, что я не понимаю:IOS Swift - Снизить функция

var peers: [String:NSSet] = [:] 
for s in squares { 
    var ps = reduce(units[s]!, NSMutableSet()) { set, u in 
    set.addObjectsFromArray(u) 
    return set 
    } 
    ps.removeObject(s) 
    peers[s] = ps 
} 

squares является массив String.

До сих пор я понял, что peers, вероятно, является структурой данных ключа/значения с ключами строки и значениями NSSet. NSSet аналогичен массиву, но он не может принимать повторяющиеся элементы. Основная часть, которую я не понимаю, на самом деле является функцией reduce. Любое объяснение или поучительная статья/веб-страница приветствуются.

ответ

2

reduce - метод, который используется для уменьшения массива в одно значение с помощью оператора, который вы предоставляете для построения конечного результата. Большинство демонстраций этого, доступных в учебниках, используют + или *, чтобы уменьшить массив чисел в единую сумму или результат умножения.

Метод, который вы используете, принимает входной массив units[s] и начальное значение NSMutableSet() (пустой набор), а затем применяет замыкание к каждому элементу в последовательности.

Ваш код показывает, что элементы units[s] снова являются массивами; так что ваши данные могут выглядеть примерно так:

units[s]: [ 
      [1, 2, 3, 4], 
      [5, 6, 7, 8], 
      [1, 3, 5, 7] 
      ] 

Изготовление ps быть:

ps: [ 1, 2, 3, 4, 5, 6, 7, 8 ] 

reduce после вызова.

1
var ps = reduce(units[s]!, NSMutableSet()) { set, u in 
    set.addObjectsFromArray(u) 
    return set 
    } 

Уменьшение сочетает в себе элементы из массива в качестве первого параметра (единицы [с] должно быть массивом) во второй параметр (здесь NSMutableSet). Следующий код в фигурных скобках указывает, как объединить элементы. «Set» и «u» относятся к единицам [s] и набору NSMutable. Поэтому он берет каждый элемент в единицах [s] и добавляет их в NSMutableSet.

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