有这个面试问题。
编写一个函数来展平dicts数组
EXAMPLE_INPUT:
example_input = [{a:{b:{c:{d:'e'}}}}, {a:{b:{c:{d:{e:'f'}}}}}]
example_output:[{a_b_c_d:'e'}, {a_b_c_d_e:'f'}]
上述输入可以映射到哪种数据结构?
class Node {
String s;
Node node;
}
我尝试使用此Node类导致{node:{node:{node:{s:'value'}
而不是{a:{b:{c:{d:'e'}}}}
以上。
答案 0 :(得分:1)
不要忘记字典是成对classpath 'com.android.tools.build:gradle:1.1.0'
的集合,其中包含密钥唯一的不变量。所以你可以把它们表示为:
(key, value)
其中class Dict {
List<Pair> pairs;
}
是
Pair
或者如果你想要更一般的概念:
class Pair {
String key;
Dict value;
}
请注意,您可以将单个值表示为class Pair<T> {
T key;
Dict value;
}
个Dict
,其值为Pair
。然后你的展平功能无效
null
答案 1 :(得分:0)
您可以使用实现以下界面的两个类对输入进行建模:
public interface Node {
public Map<String, String> flatten(String prefix);
}
字符串节点:
public class StringNode implements Node {
private String nodeString;
public StringNode(String s){
this.nodeString = s;
}
public Map<String, String> flatten(String prefix){
Map<String, String> map = new HashMap<String, String>();
map.put(prefix, nodeString);
return map;
}
}
字典节点:
public class DictNode extends HashMap<String, Node> implements Node {
public Map<String, String> flatten(String prefix){
Map<String, String> map = new HashMap<String, String>();
if ( prefix.length() > 0 ) prefix = prefix + "_";
for ( String key : keySet() ) {
map.putAll(get(key).flatten(prefix + key));
}
return map;
}
}
现在,您唯一需要做的就是在节点上调用flatten方法 使用空字符串参数值,您将获得扁平字典。