Javascript 简化项目替换链的逻辑
我有一些物品正在被其他物品替换,因此创建了一个替换链,如下所示: +---------------+------------------+ | Replaced Item | Replacement Item | +---------------+------------------+ | A | B | | B | C | | C | D | | G | H | +---------------+------------------+ 我从ref.hashCode()方法中获得了hashCodeJavascript 简化项目替换链的逻辑,javascript,java,ruby,simplification,Javascript,Java,Ruby,Simplification,我有一些物品正在被其他物品替换,因此创建了一个替换链,如下所示: +---------------+------------------+ | Replaced Item | Replacement Item | +---------------+------------------+ | A | B | | B | C | | C | D
//A = 65
//B = 66
//C = 67
//D = 68
//E = 71
//F = 72
//----
// Now A --> B means
ref2 = ref1;
//A = 65
//B = 65
//C = 67
//D = 68
//E = 71
//F = 72
//----
// Now B --> C means
ref3 = ref2;
//A = 65
//B = 65
//C = 65
//D = 68
//E = 71
//F = 72
//----
// Now C --> D means
ref4 = ref3;
//A = 65
//B = 65
//C = 65
//D = 65
//E = 71
//F = 72
//----
// Now C --> D means
ref6 = ref5;
//A = 65
//B = 65
//C = 65
//D = 65
//E = 71
//F = 71
//----
现在我需要遍历所有引用,并将hashcode放入一个包含唯一值的集中。所以我只有65分和71分
现在,,
65->A、B、C、D和优先级D是最后一个元素。
71->G,H优先顺序H是最后一个元素
因此,我可以总结如下:
+---------------+------------------+
| Replaced Item | Replacement Item |
+---------------+------------------+
| A | D |
| B | D |
| C | D |
| G | H |
+---------------+------------------+
+---------------+------------------+
|替换项|替换项|
+---------------+------------------+
|A | D|
|B|D|
|C|D|
|G | H|
+---------------+------------------+
您可以通过一些简单的递归获得一个新的“映射”:
var替换={
A:‘B’,
B:‘C’,
C:‘D’,
G:‘H’
},
map={};
功能替换(字母){
if(!replacements[letter])//如果替换内容不包含当前字母,
返回字母;//只使用当前字母
return replace(replacements[字母]);//否则,获取替换字母。
}
对于(替换中的var key){/'key'为:A、B、C、G
map[key]=replace(key);//在映射中指定一个新的替换值。
}
控制台日志(map)代码>Erm。。。为什么不简单地将每个链构建为一个列表,然后使用第一个和最后一个元素作为新表?(使用循环检查…)那么,Apoorv,我的答案是否回答了你的问题?@Florian Schaetz:因为它不一定只是下一个和上一个之间的链接。。向前看,H也可以用C代替。因此它无法创建链接列表。这是一棵树。谢谢你的回答。我试图在java中将其实现为不相交的集合数据结构。这看起来容易得多。只有当替换项是相同的变量(如“A->A”)时,它才会失败,但我们可以事先删除这些元素,因为这些替换没有意义。
//A = 65
//B = 66
//C = 67
//D = 68
//E = 71
//F = 72
//----
// Now A --> B means
ref2 = ref1;
//A = 65
//B = 65
//C = 67
//D = 68
//E = 71
//F = 72
//----
// Now B --> C means
ref3 = ref2;
//A = 65
//B = 65
//C = 65
//D = 68
//E = 71
//F = 72
//----
// Now C --> D means
ref4 = ref3;
//A = 65
//B = 65
//C = 65
//D = 65
//E = 71
//F = 72
//----
// Now C --> D means
ref6 = ref5;
//A = 65
//B = 65
//C = 65
//D = 65
//E = 71
//F = 71
//----
+---------------+------------------+
| Replaced Item | Replacement Item |
+---------------+------------------+
| A | D |
| B | D |
| C | D |
| G | H |
+---------------+------------------+