Scala:递归地修改元素/列表的列表
||
我希望有人可以在Scala中为我提供一些基本的代码帮助。我已经用Python编写了一些演示代码。
考虑一个元素列表,其中一个元素可以容纳整数或其他元素列表。我想递归检查此结构并在保留整个结构的同时对其进行修改。
为了用python表示这一点,我将每个\\\\\\\\\\\\\\\\\\\\的组成了一键字典(item为\'i \')。对应于该键的值是int或类似字典的列表。从而,
lst = [{\'i\': 1}, {\'i\': 2}, {\'i\': [{\'i\': 5}, {\'i\': 6}]}, {\'i\': 3}]
def recurse(x):
if isinstance(x, list):
return [recurse(a) for a in x]
else:
if isinstance(x[\'i\'], list):
return dict(i=[recurse(a) for a in x[\'i\']])
else:
return dict(i=(x[\'i\'] + 1))
print \"Input:\"
for i in lst:
print i
print \"\\nResult:\\n%s\" % recurse(lst)
>>>
Input:
{\'i\': 1}
{\'i\': 2}
{\'i\': [{\'i\': 5}, {\'i\': 6}]}
{\'i\': 3}
Result:
[{\'i\': 2}, {\'i\': 3}, {\'i\': [{\'i\': 6}, {\'i\': 7}]}, {\'i\': 4}]
我知道这是做事的一种怪异方法,但是我提供的数据就是这样构造的。我认为我的问题是python允许您从同一函数返回不同类型,而我不认为Scala可以。
同样为了记录,Scala元素表示为Elem(4)或Elem(List(Elem(3)...),因此我认为可以在其中进行模式匹配。
没有找到相关结果
已邀请:
3 个回复
犯痪桂涛杭
然后添加方法映射以将函数应用于树中的每个值
那么您的输入是:
如果您呼叫
,您将得到输出 由于varargs Tree [A] *,结果显示有些难看。您可以通过添加节点ѭ5来改善 您可能只喜欢在类外部或直接在Tree中的某个位置使用该方法。这是Tree中的一种方法
像在Python中那样使用无类型的方式并不是很容易,但是可以完成。
(将值直接放在列表中。带有键“ i”的地图(字典)使其复杂化并强制接受编译器警告,因为我们将不得不强制执行无法检查的强制转换,即,地图接受字符串作为键:案例映射:Map [String,_]) 与直接将值直接放入List相比,使用
听起来没有任何额外的安全性,同时更为冗长,并且将其称为树并区分节点和叶子而不明显地麻烦也没有安全性和清晰度。
吠强祷豪硅
范例:
娜拐赐巫潭