你如何将 javascript reduce() 翻译成 Swift 2?
How would you translate javascript reduce() to Swift 2?
…假设 js reduce() 接受一个 3 参数函数如下?
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()
但是,由于 arg 的数量不匹配,reduce() 无法编译。
有什么想法吗?
你可以使用reduce函数如下:
[1, 3, 5].reduce(0) { previousValue, arrayValue in
return previousValue + arrayValue
}
// returns 9
在您的情况下,您可以通过调用枚举来获取值的索引:
// 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)
}
…假设 js reduce() 接受一个 3 参数函数如下?
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()
但是,由于 arg 的数量不匹配,reduce() 无法编译。
有什么想法吗?
你可以使用reduce函数如下:
[1, 3, 5].reduce(0) { previousValue, arrayValue in
return previousValue + arrayValue
}
// returns 9
在您的情况下,您可以通过调用枚举来获取值的索引:
// 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)
}