Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 如何访问列表中元组的第一个元素?_F# - Fatal编程技术网

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

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

我试图在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))

但我不确定如何访问列表中的第一个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