如何访问列表中元组的第一个元素?

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循环。

以上是关于如何访问列表中元组的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

关于Python中元组的问题

提取管道中元组的第二个元素

我如何获得haskell中元组的索引?

python中的list元组如何按照第二维元素排序

如何提取每个子列表中每个元组的第一个元素?

scala中元组成员的重新排序