Julia 朱莉娅:我怎样才能缩短这个重复的条件语句代码?

Julia 朱莉娅:我怎样才能缩短这个重复的条件语句代码?,julia,Julia,我想创建15个虚拟变量,并在下面的代码中使用它们,我也希望将其缩短。所以问题是,我如何在不使用D1=zeros3300,…,D15=zeros3300的情况下生成这15个虚拟变量 还有,我如何使它更紧凑 for i=1:3300 if dt[i,2]==1 D1[i]=1 end if dt[i,2]==2 D2[i]=1 end if dt[i,2]==3 D3[i]=1 end if dt[i,2]==4 D4[i]=1 end if dt[i,2]=

我想创建15个虚拟变量,并在下面的代码中使用它们,我也希望将其缩短。所以问题是,我如何在不使用D1=zeros3300,…,D15=zeros3300的情况下生成这15个虚拟变量

还有,我如何使它更紧凑

for i=1:3300
    if dt[i,2]==1 D1[i]=1 end
    if dt[i,2]==2 D2[i]=1 end
    if dt[i,2]==3 D3[i]=1 end
    if dt[i,2]==4 D4[i]=1 end
    if dt[i,2]==5 D5[i]=1 end
    if dt[i,2]==6 D6[i]=1 end
    if dt[i,2]==7 D7[i]=1 end
    if dt[i,2]==8 D8[i]=1 end
    if dt[i,2]==9 D9[i]=1 end
    if dt[i,2]==10 D10[i]=1 end
    if dt[i,2]==11 D11[i]=1 end
    if dt[i,2]==12 D12[i]=1 end
    if dt[i,2]==13 D13[i]=1 end
    if dt[i,2]==14 D14[i]=1 end
    if dt[i,2]==15 D15[i]=1 end
end

我建议不要直接创建变量D1到D15,而是将它们保存在向量向量中,并按如下方式分配给它们:

D = [zeros(3300) for i in 1:15]
for i in 1:3300
    D[dt[i,2]][i] = 1
end
现在D[i]相当于你的Di

如果您真的想在全局范围内使用Di变量,您可以稍后编写示例:

for i in 1:15
    eval(:($(Symbol("D", i)) = D[$i]))
end
您将得到Di变量

在《朱莉娅》中,这个角色有两个句法目的。第一种形式创建一个符号,一个内部字符串,用作表达式的一个构建块:

julia> :foo
:foo

julia> typeof(ans)
Symbol
第二个是范围操作符。a:b构造了一个从a到b的范围,步长为1 a UnitRange,a:s:b类似,但使用步长为s a StepRange

Julia允许使用以下命令插入字符串文字,如在Perl中:

julia> "$greet, $whom.\n"
"Hello, world.\n"

julia> "1 + 2 = $(1 + 2)"
"1 + 2 = 3"
以类似的方式,您可以插入表达式,例如:

julia> x = 1
1

julia> :(x = $x)
:(x = 1)
通过将参数的字符串表示形式连接在一起来创建符号

julia> Symbol("my", "name")
:myname

我建议不要直接创建变量D1到D15,而是将它们保存在向量向量中,并按如下方式分配给它们:

D = [zeros(3300) for i in 1:15]
for i in 1:3300
    D[dt[i,2]][i] = 1
end
现在D[i]相当于你的Di

如果您真的想在全局范围内使用Di变量,您可以稍后编写示例:

for i in 1:15
    eval(:($(Symbol("D", i)) = D[$i]))
end
您将得到Di变量

在《朱莉娅》中,这个角色有两个句法目的。第一种形式创建一个符号,一个内部字符串,用作表达式的一个构建块:

julia> :foo
:foo

julia> typeof(ans)
Symbol
第二个是范围操作符。a:b构造了一个从a到b的范围,步长为1 a UnitRange,a:s:b类似,但使用步长为s a StepRange

Julia允许使用以下命令插入字符串文字,如在Perl中:

julia> "$greet, $whom.\n"
"Hello, world.\n"

julia> "1 + 2 = $(1 + 2)"
"1 + 2 = 3"
以类似的方式,您可以插入表达式,例如:

julia> x = 1
1

julia> :(x = $x)
:(x = 1)
通过将参数的字符串表示形式连接在一起来创建符号

julia> Symbol("my", "name")
:myname

以后如何使用D1…D15变量?以后有空吗?看起来很奇怪,你需要D1…D15。有经验的程序员几乎从不这样做。取而代之的是,它们使用索引到的集合。即使@BogumiłKamiński向你展示了如何做到这一点,你几乎肯定应该使用他的第一个建议,而不是第二个。完全同意。我展示它只是为了回答这个问题,因为这是一个实际的问题,因为在Julia中所要求的实际上是可能的。你以后如何使用D1…D15变量?以后有空吗?看起来很奇怪,你需要D1…D15。有经验的程序员几乎从不这样做。取而代之的是,它们使用索引到的集合。即使@BogumiłKamiński向你展示了如何做到这一点,你几乎肯定应该使用他的第一个建议,而不是第二个。完全同意。我展示它只是为了回答这个问题,因为这是一个实际的问题,因为在Julia中所要求的实际上是可能的。谢谢你的编辑建议。我之前省略了它,因为正如上面讨论的那样,这实际上是不推荐的。此外,我还添加了一个解释,即插值适用于字符串和表达式。感谢您的编辑建议。我之前省略了它,因为正如上面讨论的那样,这实际上是不推荐的。此外,我还添加了一个解释,即插值适用于字符串和表达式。