【发布时间】:2017-12-25 12:31:58
【问题描述】:
我在这里找到了一段非常棒的代码 https://stackoverflow.com/a/45979883/9138729
我很难让它在我的 C# 表单应用程序中工作
function transposeChord(chord, amount) {
var scale = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
var normalizeMap = {
"Cb": "B",
"Db": "C#",
"Eb": "D#",
"Fb": "E",
"Gb": "F#",
"Ab": "G#",
"Bb": "A#",
"E#": "F",
"B#": "C"
};
return chord.replace(/[CDEFGAB](b|#)?/g, function(match) {
matchIndex = normalizeMap[match] ? normalizeMap[match] : match;
var i = (scale.indexOf(matchIndex) + amount) % scale.length;
if (i < 0) {
return scale[i + scale.length];
} else {
return scale[i];
}
}
);
}
- normalizeMap var 每行有 2 个选项(string[,]?)。
- C# 中的替换功能不适用于“(b|#)?/g”部分(我认为)
- 函数(匹配)存在于 C# 中?
或者我是否需要采用全新的方法来适应 C# 逻辑?
【问题讨论】:
-
C# 具有所有类似的构造,以便您能够转换此代码。
normalizeMap将是Dictionary<string, string>。替换为new Regex("[CDEFGAB](b|#)?").Replace(chord, match => { ... function here ...}) -
但是,如果您仍然无法使用上述信息进行转换,请随时询问。
-
感谢您的帮助,我已经解决了代码(对于任何想使用它的人,我已将其粘贴在上面)