我想要j = 1 .. j = -1和i = -1 .. i = 1之类的东西,我知道Java / C#的做法,但不是F#。
for j in 1 .. -1 do
for i in -1 .. 1 do
//all 9 combination.
指导,谢谢你。
答案 0 :(得分:8)
当looping降为数字时,您可以使用downto关键字:
for j = 1 downto -1 do
for i = -1 to 1 do
或者你可以在@Jaya的回答中使用for in范围语法。
答案 1 :(得分:5)
for j in 1.. -1 .. -1 do
for i in -1 .. 1 .. 1 do
printf "%d , %d" i j
答案 2 :(得分:2)
Jaya和Phillip Trelford的答案都很好。如果你想要一系列所有组合而不是命令式循环,你可以这样做:
let combinations =
[1 .. -1 .. -1]
|> Seq.collect (fun i -> [-1 .. 1] |> Seq.map (fun j -> (i, j)))
这会生成这样的序列(转换为列表时):
[(1, -1); (1, 0); (1, 1); (0, -1); (0, 0); (0, 1); (-1, -1); (-1, 0); (-1, 1)]
如果您想要一个不同的顺序,您可以随时对元组进行排序,但以不同方式生成序列可能更有效。例如,如果您想要这个序列:
(-1,1) (0,1) (1,1) (-1,0) (0,0) (1,0) (-1,-1) (0,-1) (1,-1)
您可以简单地切换i
和j
:
let combinations =
[1 .. -1 .. -1]
|> Seq.collect (fun i -> [-1 .. 1] |> Seq.map (fun j -> (j, i)))
生成此序列(转换为列表以便于阅读):
[(-1, 1); (0, 1); (1, 1); (-1, 0); (0, 0); (1, 0); (-1, -1); (0, -1); (1, -1)]
答案 3 :(得分:1)
如果你真的只是计算-1,0,1,那么将它写出来可能会更清楚:
for j in [1; 0; -1] do
for i in [-1; 0; 1] do
printfn "%d,%d" i j