我有一些项目被其他项目替换,因此创建了一个替换链:
+---------------+------------------+ | Replaced Item | Replacement Item | +---------------+------------------+ | A | B | | B | C | | C | D | | G | H | +---------------+------------------+
如果我们简化它的关系链,我们发现为
A - > B - > C - > d
&安培;
G - > ħ
最后,我希望以简化表格的形式实现输出:
+---------------+------------------+ | Replaced Item | Replacement Item | +---------------+------------------+ | A | D | | B | D | | C | D | | G | H | +---------------+------------------+
我的问题是: 是否有任何现有的API或算法来解决javascript / java / ruby等中的这种类型的链简化问题。
我尝试的是: 我以为我可以通过使用Java引用来解决它。 当我们为另一个引用分配引用时,两个引用都指向同一个对象,因此对象ID将是相同的。 我创建了几个引用:
String ref1 = "A";
String ref2 = "B";
String ref3 = "C";
String ref4 = "D";
String ref5 = "G";
String ref6 = "H";
我从 ref.hashCode()方法获得了哈希码。
//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
//----
现在我需要遍历所有引用并将哈希码放入包含唯一值的 set 中。所以我只有65和71。
现在, 65 - > A,B,C,D和优先级D是最后一个元素。 71 - > G,H优先H是最后一个元素。
所以我可以将其结论为:
+---------------+------------------+ | Replaced Item | Replacement Item | +---------------+------------------+ | A | D | | B | D | | C | D | | G | H | +---------------+------------------+
答案 0 :(得分:0)
您可以使用一些简单的递归来获取新的“地图”:
var replacements = {
A: 'B',
B: 'C',
C: 'D',
G: 'H'
},
map = {};
function replace(letter){
if(!replacements[letter]) // If the replacements don't contain the current letter,
return letter; // Just use the current letter
return replace(replacements[letter]); // Otherwise, get the replacement letter.
}
for(var key in replacements){ // 'key' being: A, B, C, G
map[key] = replace(key); // Assign a new replacement value in the map.
}
console.log(map);