Sorting 复杂类型序列的内联排序

Sorting 复杂类型序列的内联排序,sorting,nim-lang,Sorting,Nim Lang,我有以下问题: 我有一个表将点IDUINT16映射到点元组[x:float64,y:float64]。给定三个点ID,我想创建一个三角形,它是三个点ID,按x值排序,按y值排序 通过将三个点ID和表格传递给构造函数,我创建了一个三角形。然后,它应该从表中选择相应的点,对它们进行相应的排序,并返回三角形 但是,我无法使内联排序正常工作。错误被抛出到我调用vec.sort的行上。我把它贴在代码下面 import tables import system type Point* = tuple[

我有以下问题:

我有一个表将点IDUINT16映射到点元组[x:float64,y:float64]。给定三个点ID,我想创建一个三角形,它是三个点ID,按x值排序,按y值排序

通过将三个点ID和表格传递给构造函数,我创建了一个三角形。然后,它应该从表中选择相应的点,对它们进行相应的排序,并返回三角形

但是,我无法使内联排序正常工作。错误被抛出到我调用vec.sort的行上。我把它贴在代码下面

import tables
import system

type
  Point* = tuple[x: float64, y: float64]
  PointData* = tuple[id: uint16, point: Point]
  Triangle* = tuple[left: uint16, middle: uint16, right: uint16]

proc createTriangle*(p1: uint16, p2: uint16, p3: uint16, pointToPosition: Table[uint16, Point]): Triangle =
  if p1 in pointToPosition and p2 in pointToPosition and p3 in pointToPosition:
    let t1: PointData = (p1, pointToPosition[p1])
    let t2: PointData = (p2, pointToPosition[p2])
    let t3: PointData = (p3, pointToPosition[p3])
    var vec = @[t1, t2, t3]
    vec.sort do (a, b: PointData) -> int:
      result = system.cmp(a.point.x, b.point.x)
      if result == 0:
        result = system.cmp(a.point.y, b.point.y)
    result = (vec[0].id, vec[1].id, vec[2].id)
  else:
    raise newException(SystemError, "tried to create Triangle with unknown point IDs")
错误:

types.nim(31, 8) Error: type mismatch: got (seq[PointData], void)
but expected one of: 
proc sort[A](t: CountTableRef[A])
proc sort[A, B](t: var OrderedTable[A, B]; cmp: proc (x, y: (A, B)): int)
proc sort[A, B](t: OrderedTableRef[A, B]; cmp: proc (x, y: (A, B)): int)
proc sort[A](t: var CountTable[A])

由于某种原因,我的内联排序过程存在类型不匹配。它说它是空的,而不是空的。发生了什么事?

您做得很对,只是忘记了导入模块算法,其中定义了seqs排序。此外,不需要导入系统,因为它总是隐式导入的