我不想将一些代码从JS转换为C#,但却无法真正想象一部分...
function getHisto(pixels) {
var histosize = 1 << (3 * sigbits),
histo = new Array(histosize),
index, rval, gval, bval;
pixels.forEach(function(pixel) {
rval = pixel[0] >> rshift;
gval = pixel[1] >> rshift;
bval = pixel[2] >> rshift;
index = getColorIndex(rval, gval, bval);
histo[index] = (histo[index] || 0) + 1;
});
return histo;
}
我对histo []有什么期望?我不明白这一行:
histo[index] = (histo[index] || 0) + 1;
如果您需要任何其他信息,我会尝试提供。
编辑1:我特意指histo[index] || 0
答案 0 :(得分:1)
第histo[index] = (histo[index] || 0) + 1;
行
添加到数组并通过current index + 1
或0 + 1
计算出放置位置的位置。
基本上,或(||
)处理它的第一个添加到histo
的边缘情况。
答案 1 :(得分:1)
该行
histo[index] = (histo[index] || 0) + 1;
是实现此目标的捷径:
if (!histo[index]) {
histo[index] = 0;
}
histo[index] = histo[index] + 1;
对你来说可能更有意义。
请参阅this answer for comparison between the almost equivalent ??
in C# and ||
in JS
答案 2 :(得分:1)
方括号表示法与C#中的相同,它是按索引访问的数组。
例如。如果你有一个包含两个项目的数组:
// javascript
var x = ["a", "b"];
// C#
var y = string[] {"a", "b"};
第一项是索引0
,第二项是索引1
。然后,您可以使用方括号表示法访问每个项目:
var first = x[0];
var second = x[1];
答案 3 :(得分:1)
||
是Logical-OR operator in JavaScript
在C#中替换它的等价物将是??
Null-Coalesce operator
所以基本上在C#
中,你的行看起来像这样。
histo[index] = (histo[index] ?? 0) + 1;