是否可以仅使用 2 个循环循环 1 个值?

is it possible to loop though 2 values using only 1 loop?

提问人: 提问时间:5/22/2019 更新时间:5/22/2019 访问量:243

问:

我有可变变量 x 和 y,我只能使用 while (something) 循环。我想循环通过 0 ..9 和 0 ..9. 我尝试使用不同的 if 语句和不同的顺序进行多次尝试。这是我到目前为止所拥有的。

open System

let mutable x = 0
let mutable y = 0

let n = 9

while x <> n && y <> n do
    Console.SetCursorPosition(x, y)
    printf "."

    // ...

Console.Read() |> ignore
while-循环 f# 可变

评论

0赞 glennsl 5/22/2019
这听起来像是你应该自己解决的任务。如果您能更具体地说明您遇到的困难,我们也许能够为您提供帮助。但我们不会只给你解决方案,因为这会破坏练习的重点。
0赞 5/22/2019
@glennsl 这不是我还没有学习的作业,我只是用这种措辞来表达我想要做得更好的地方。我想在控制台上得到一个 10x10 的“.”正方形。我尝试添加第三个变量 i,它将确定我现在是否应该循环 x 或 y,但仍然无法让它工作。

答:

0赞 Tomas Petricek 5/22/2019 #1

执行此操作的正常方法是使用两个嵌套循环 - 如果您要遍历已知数量的项(而不是无限地迭代,直到某些条件成立),那么循环会更容易:for

for x in 0 .. 9 do
  for y in 0 .. 9 do
    Console.SetCursorPosition(x, y)
    printf "."

嵌套循环迭代 10 次,外部循环运行嵌套循环 10 次,因此您可以获得嵌套正文的 100 次执行。

如果您迭代超过 100 个值,则只需一个循环即可完成此操作,即 这是.如果你有从 到 的数字,那么你可以通过取 和 来计算 和 :0 .. 10*10-10 .. 99099xyx=n/10y=n%10

for n in 0 .. 10 * 10 - 1 do
  let x = n / 10
  let y = n % 10
  Console.SetCursorPosition(20+x, y)
  printf "."

评论

1赞 5/22/2019
是的,这正是我想要的,我只是在想我可能必须在那里灌输最大次数的迭代并在某个地方使用模量。谢谢!现在我可以比较速度(并不是说我期望它比嵌套循环快)。
1赞 dumetrulo 5/22/2019
在这种情况下,瓶颈将是控制台活动;我敢说你使用的循环类型(单循环、嵌套循环、手卷递归函数,甚至是序列)应该不会产生显着差异。