复杂类型序列的内联排序

Inline sorting of complex type sequence

我有以下问题:

我有一个 table 映射点 ID (uint16) 到 Points (tuple[x: float64, y: float64])。给定三个点 ID,我想创建一个 Triangle,它是按 x 值排序的点 ID 的三元组(然后按 y 值排序)。

我通过将三个点 ID 和 table 传递给构造函数来创建 Triangle。然后它应该从 table 中选择相应的 Points,相应地对它们进行排序,然后 return 三角形。

但是,我无法使内联排序正常工作。错误是在我调用 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])

由于某种原因,我的内联排序过程存在类型不匹配。它说它得到了 void 而不是它。怎么回事?

你做得对,除了你忘记导入模块 algorithm,其中定义了 seqs 的排序。也不需要 import system 因为它总是隐式导入。