F# 如何访问列表中元组的第一个元素?
我试图在f#中的类中创建一个碰撞方法。 碰撞方法应该有一个输入,即时间。 该方法应检查应随时间移动的无人机数量,以及其中一些无人机是否会碰撞。碰撞定义为相互之间在5个“块”内 到目前为止,我已经有了这个方法的代码F# 如何访问列表中元组的第一个元素?,f#,F#,我试图在f#中的类中创建一个碰撞方法。 碰撞方法应该有一个输入,即时间。 该方法应检查应随时间移动的无人机数量,以及其中一些无人机是否会碰撞。碰撞定义为相互之间在5个“块”内 到目前为止,我已经有了这个方法的代码 type Airspace(drones:Drone list) = let mutable drones = drones member x.Drones with get() = drones member x.Collision(time:int
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))
但我不确定如何访问列表中的第一个I'th元素,然后只获取元组的第一个元素并将其与另一个元素进行比较。如何做到这一点?好吧,这并不是100%错误,它可能会起作用,但是的,建议不要使用
ItemX
,而是使用模式匹配元组元素,因此您可以这样做:
let (xi, _) = drones.Item(i).Position
let (xj, _) = drones.Item(j).Position
if xi - xj >= -5.0 || xi - xj <= 5.0
还请注意,您可以使用输送到List.tryFind
的函数List.allPairs
,而不是for循环
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