【发布时间】:2015-04-02 14:17:51
【问题描述】:
如何创建一个高效的递归函数 - 它将接受一个输入提要 - 可能有 1000 行长。成一个紧凑的数组。递归函数可能需要某种查找来确定当前员工 ID 之上是否有经理。
我正在尝试构建一个可能需要数组中的整个关系管理树的应用程序。
我需要想出一种方法来在输入数据馈送上创建递归函数,以将其映射到整理的输出数组。
//the input data may look something like this
[{
"employeeId": "A1",
"managerId": "B1",
"employeeRole": "Sales0",
"managerRole": "Sales1"
}, {
"employeeId": "B1",
"managerId": "C1",
"employeeRole": "Sales1",
"managerRole": "Sales2"
}, {
"employeeId": "C1",
"managerId": "D1",
"employeeRole": "Sales2",
"managerRole": "Sales3"
}, {
"employeeId": "D1",
"managerId": "",
"employeeRole": "Sales3",
"managerRole": "Sales4"
}]
//create a final output array like this
[
"level1id": "A1",
"level2id": "B1",
"level3id": "C1",
"level4id": "D1",
]
我现阶段的基本伪代码是这样的
void myMethod(String employeeId, String[] rawData, Map < String, String > dataMap) {
//employeeId -- child id
//rawData - from feed
//dataMap - the array being built to contain ALL relationships from grand child, parent, grandparent.
getManager(employeeId, rawData) {
//find the manager of the current employeeid
//managerData[0] - manager id
//managerData[1] - manager role
return managerData;
}
managerData = getManager(employeeId, rawData);
managerId = managerData[0];
managerRole = managerData[1];
dataMap.put(managerData[1], managerData[0]);
// like [{"customerLevel1" : "SKDOL2"}]
//if there is no manager id - the grandparent manager has been found
if (managerId !== null)
return;
else {
//this employeeid has a manager above them - loop through again until the grandparent is found (employee id with no manager)
myMethod(managerId, rawData, dataMap);
return;
}
}
【问题讨论】:
-
哦,这是一个不错的项目。你有什么问题?
-
问题 - 是 - 我如何将输入数据有效地转换为压缩数组。
-
所以在你的问题中这么说。如果你还没有读过How to Ask,你会想读;这太宽泛了,因为您只是要求我们为您提供代码。
-
是的 - 谢谢你的迂腐 cmets - 我已经编辑了帖子以重新执行问题 - 我专注于手头所需的逻辑
-
更改标题可能也值得 - 您不是在寻找递归 Java 函数,而是在寻找递归 Java 数据结构。这不是一个迂腐的声明,也不是@QPaysTaxes',这是一种改进您的问题并因此增加您获得好答案的机会的方法。