如何将javascript reduce()转换为Swift 2

How would you translate javascript reduce() to Swift 2?

本文关键字:转换 Swift javascript reduce      更新时间:2023-09-26

…提供了js reduce(),采用如下三参数函数?

var relevance = _(s.words).reduce( function (memo, freq, w) {
    var local = Math.log( 1 + freq );
    var global = Math.log( N / containing(w).length );
    return memo = memo + (local * global);
}, 0);

到目前为止,我想到了:

let relevance = s.words.reduce(0) {
   (memo, freq, w) in
   var local = log( 1 + freq )
   var global = log( N / containing(w).length )
   return memo = memo + (local * global)
} // ~reduce()

但是,由于参数数量不匹配,reduce()无法编译。

知道吗?

您可以使用reduce函数,如下所示:

[1, 3, 5].reduce(0) { previousValue, arrayValue in
    return previousValue + arrayValue
}
// returns 9

在您的情况下,您可以通过调用enumerate:来获得值的索引

// indexValue is of type (index: Int, element: Int)
[1, 3, 5].enumerate().reduce(0) { previousValue, indexValue in
    // access index
    indexValue.index
    // access value
    indexValue.element
    return previousValue + indexValue.element
}
// returns also 9

您的代码:

let relevance = s.words.enumerate().reduce(0) {
   (memo, freqW) in
   let freq = Double(freqW.index)
   let w = freqW.element
   // use let if you don't modify the value
   let local = log( 1 + freq )
   // you probably need to convert some of the variables to Double
   let global = log( N / containing(w).length )
   // in the next iteration memo will be this returned value
   return memo + (local * global)
}