如何查找项目是否包含在Julia的Dict中

时间:2019-02-02 00:22:19

标签: dictionary if-statement julia

我对朱莉娅(Julia)相当陌生,她试图弄清楚如何检查给定的表达式是否包含在我创建的Dict中。

function parse( expr::Array{Any} )
   if expr[1] == #check here if "expr[1]" is in "owl"
       return BinopNode(owl[expr[1]], parse( expr[2] ), parse( expr[3] ) )
   end
end

owl = Dict(:+ => +, :- => -, :* => *, :/ => /)

我看过Julia的文档和其他资源,但是找不到任何答案。

“ owl”是我要检查的字典的名称。我想运行return语句,expr [1]应该是“ +,-,*或/”。

2 个答案:

答案 0 :(得分:3)

检查某些词典是否包含某些键的标准方法是:

:+ in keys(owl)

haskey(owl, :+)

您的解决方案取决于这个事实,你确信0是不是在字典中的值,这可能不是一般的真实之一。但是,如果你想用这种方法(它时,你不想执行两次在字典中查找是有用的:第一次检查,如果它包含了一些关键的,并第二次获得分配,如果它的关键价值存在),那么通常你会使用nothing作为定点,然后进行检查get_return_value !== nothing(注二等=在这里 - 他们是重要的编译器生成高效的代码)。因此您的代码将如下所示:

function myparse(expr::Array{Any}, owl) # better pass `owl` as a parameter to the function
   v = get(expr[1], owl, nothing)
   if v !== nothing
       return BinopNode(v, myparse(expr[2]), myparse(expr[3]))
   end
   # and what do we do if v === nothing?
end

请注意,我用myparse名称,如parse是在基地中定义的函数,所以我们不希望有一个名称冲突。最后,您的myparse是递归的,因此您应该为此函数定义第二种方法,以处理expr不是Array{Any}时的情况。

答案 1 :(得分:0)

我觉得自己这么快找到了一个白痴,但是我想出了以下解决方案:(但是,我想听听更有效的答案)

yes = 1
yes = get(owl,expr[1],0)
if yes != 0
   #do return statement here
如果在字典“ owl”中找不到表达式,则

“ yes”应设置为等于0。因此,一个简单的!= if语句来查看它是否为零即可解决我的问题。