如何访问列表中元组的第一个元素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何访问列表中元组的第一个元素?相关的知识,希望对你有一定的参考价值。
我正在尝试在f#中的类中创建碰撞方法。碰撞方法应有一个输入,即时间。该方法应检查随时间推移移动的许多无人机,以及其中一些是否会发生碰撞。冲突定义为彼此相距5个“块”之内。
到目前为止,我已经将该方法的代码。
type Airspace(drones:Drone list) =
let mutable drones = drones
member x.Drones with get() = drones
member x.Collision(time:int) =
for d = 1 to time do
for i = 1 to drones.Length do
for j = 1 to drones.Length do
if drones.Item(i).Position.Item1 - drones.Item(j).Position.Item1 >= -5.0 || drones.Item(i).Position.Item1 - drones.Item(j).Position.Item1 <= 5.0
then if drones.Item(i).isFinished() = True && drones.Item(j).isFinished() = True then printfn "Drone: %A will collide with %A" (drones.Item(i)) (drones.Item(j))
顺便说一下,无人机是一列无人驾驶飞机,并且无人驾驶飞机具有当前位置,作为元组float float,目的地也为float] float和速度(即float)。
我很确定这是错误的
drones.Item(i).Position.Item1
但是我不确定如何访问列表中的第i个元素,然后仅获取元组的第一个元素并将其与另一个元素进行比较。我该怎么办?
答案
嗯,这不是100%错误,它可能有用,但是是,建议不要使用ItemX
而是对元组元素进行模式匹配,因此您可以这样做:
let (xi, _) = drones.Item(i).Position
let (xj, _) = drones.Item(j).Position
if xi - xj >= -5.0 || xi - xj <= 5.0
顺便说一句,如果您真的不需要使用索引,还可以将循环更改为:
for di in drones do
for dj in drones do
let (xi, _) = di.Position
let (xj, _) = dj.Position
还请注意,您可以使用传递到List.allPairs
的函数List.tryFind
代替for循环。
以上是关于如何访问列表中元组的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章