Filter Julia迭代器积与滤波器

Filter Julia迭代器积与滤波器,filter,iterator,julia,Filter,Iterator,Julia,我需要在3个阵列上找到一个解决方案,解析a+b+c=15(或其他) 到目前为止,我一直使用以下代码: A=1:10 B=1:10 C=1:10 可能性=迭代器。乘积(A,B,C) 解决方案=迭代器。过滤器((a,b,c)->a+b+c==15,可能性) sol=收集(解决方案) 对于溶胶中的(a,b,c) println(a,“,b,”,c) 结束 我从编译器中得到这个错误: > ERROR: LoadError: MethodError: no method matching >

我需要在3个阵列上找到一个解决方案,解析a+b+c=15(或其他)

到目前为止,我一直使用以下代码:

A=1:10
B=1:10
C=1:10
可能性=迭代器。乘积(A,B,C)
解决方案=迭代器。过滤器((a,b,c)->a+b+c==15,可能性)
sol=收集(解决方案)
对于溶胶中的(a,b,c)
println(a,“,b,”,c)
结束
我从编译器中得到这个错误:

> ERROR: LoadError: MethodError: no method matching
> (::##1#2)(::Tuple{Int64,Int64,Int64}) Closest candidates are:  
> #1(::Any, !Matched::Any, !Matched::Any) at /home/cg/root/7729001/main.jl:6 Stacktrace:  [1] start_filter(::##1#2,
> ::Base.Iterators.Prod{UnitRange{Int64},Base.Iterators.Prod2{UnitRange{Int64},UnitRange{Int64}}})
> at ./iterators.jl:272  [2] _collect(::UnitRange{Int64},
> ::Base.Iterators.Filter{##1#2,Base.Iterators.Prod{UnitRange{Int64},Base.Iterators.Prod2{UnitRange{Int64},UnitRange{Int64}}}},
> ::Base.HasEltype, ::Base.SizeUnknown) at ./array.jl:408  [3]
> collect(::Base.Iterators.Filter{##1#2,Base.Iterators.Prod{UnitRange{Int64},Base.Iterators.Prod2{UnitRange{Int64},UnitRange{Int64}}}})
> at ./array.jl:397 while loading /home/cg/root/7729001/main.jl, in
> expression starting on line 7

也许你有办法解决这个问题或者解决这个问题。

可能性的元素是元组。在此代码中,将每一项都视为
x

A = 1:10
B = 1:10
C = 1:10

possibilities = Iterators.product(A, B, C)
# The change is in this line
solutions = Iterators.filter(x -> x[1] + x[2] + x[3] == 15, possibilities)
sol = collect(solutions)
for (a, b, c) in sol
   println(a, " ", b, " ", c)
end

另一个答案正确地诊断出您需要处理一个元组,而不是三个参数

在Julia 1.0中,您也可以在lambda中使用,但语法并不像它那样明显:

Iterators.filter(((a, b, c),) -> a + b + c == 15, possibilities)

谢谢@JuliaLearner,谢谢你的夸奖。我也是一个学习者:)是的,我从你的答案中学到了。我曾经发布过一篇使用数组理解的文章,但是当我看到你的答案是多么的好和简洁时,我把它删除了。我希望OP能接受你的回答。谢谢你,海瑟姆,我没想到!我还在学习函数编程的基础知识@JuliaLearner我们在这里都是Julia学习者;)谢谢分享,我觉得你的表达更具可读性。