gpt4 book ai didi

java - 递归表/行生成器

转载 作者:行者123 更新时间:2023-11-29 08:11:52 25 4
gpt4 key购买 nike

我很难理解以下情况。最好的解释方式可能是举例说明

我有一个 Map > 对象。假设它包含以下数据:

ColumnA['abc','def']
ColumnB['efg','hij','klm']
ColumnC['nop']
ColumnD['qrs','tuv','wxy','zzz']

我正在尝试生成以下输出:

Row1[abc,efg,nop,qrs]
Row2[abc,efg,nop,tuv]
Row3[abc,efg,nop,wxy]
Row4[abc,efg,nop,zzz]
Row5[abc,hij,nop,qrs]
Row6[abc,hij,nop,wxy]
etc...

所以在这种情况下,总共会有 24 行。

但是,列数和行数都是动态的。我觉得这需要以某种方式递归完成,但我不确定从哪里开始。

如有任何帮助,我们将不胜感激。

更新 - 我制作了一个似乎有效的树结构。

    DefaultMutableTreeNode root = new DefaultMutableTreeNode();
Set<DefaultMutableTreeNode> curNodes = new HashSet<DefaultMutableTreeNode>();
curNodes.add(root);

final Set<Column> keys = map.keySet();
for (final Column key : keys) {
final Set<Row> rowSet = map.get(key);
Set<DefaultMutableTreeNode> tmpNodes = new HashSet<DefaultMutableTreeNode>();
for (final Row row : rowSet) {
DefaultMutableTreeNode curNode = new DefaultMutableTreeNode();
curNode.setUserObject(row);
tmpNodes.add(curNode);
for (DefaultMutableTreeNode n : curNodes) {
n.add(curNode);
}
}
curNodes = tmpNodes;
}

最佳答案

我希望这不是一些学生的作业。

首先要保持 map 键的顺序相同,请使用 SortedMap ,比如 TreeMap。此外,在您的初始 map 中,每一行仅包含一个值,例如“abc”。这里的递归是深度优先遍历。困难的是 map 没有自然遍历。其余的有 todos/candidates 和 dones/result;执行一步更改数据,然后恢复它们。

这里我使用更知名的 List,但 Stack 会更好。

public List<Row> generateRows(SortedMap<Column, Set<Cell>> map) {
List<Row> done = new ArrayList<Row>();
List<Column> columnsToDo = new LinkedList<Column>(map.keySet());
List<Cell> partialRow = new LinkedList<Cell>();
generateRowsRec(map, columnsToDo, partialRow, done);
return done;
}
void generateRowsRec(SortedMap<Column, Set<Cell>> map, List<Column> columnsToDo, List<Cell> partialRow, List<Row> done) {
if (columnsToDo.isEmpty()) {
done.add(new Row(partialRow));
return;
}
Column firstColumn = columnsToDo.remove(0); // Step A
for (Cell cell : map.get(firstColumn)) {
partialRow.add(cell); // Step B
generateRowsRec(map, columnsToDo, partialRow, done);
partialRow.remove(partialRow.size() - 1); // Unstep B
}
columnsToDo.add(0, firstColumn); // Unstep A
}

关于java - 递归表/行生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7700869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com