x/y 坐标的排序向量

2024-02-17

我有一个向量(u32, u32)表示 10 x 10 网格上坐标的元组。坐标未排序。因为标准sort函数也没有产生我想要的结果,我为他们编写了一个这样的排序函数:

vec.sort_by(|a, b| {
    if a.0 > b.0 { return Ordering::Greater; }
    if a.0 < b.0 { return Ordering::Less; }

    if a.1 > b.1 { return Ordering::Greater; }
    if a.1 < b.1 { return Ordering::Less; }

    return Ordering::Equal;
});

我的自定义函数生成的网格如下所示:

(0/0)   (0/1)   (0/2)   (0/3)   (0/4)   (0/5)   (0/6)   (0/7)   (0/8)   (0/9)
(1/0)   (1/1)   (1/2)   (1/3)   (1/4)   (1/5)   (1/6)   (1/7)   (1/8)   (1/9)
(2/0)   (2/1)   (2/2)   (2/3)   (2/4)   (2/5)   (2/6)   (2/7)   (2/8)   (2/9)
...
(9/0)   (9/1)   (9/2)   (9/3)   (9/4)   (9/5)   (9/6)   (9/7)   (9/8)   (9/9)

这不是我想要的,因为左下角应该以(0/0)正如我在数学坐标网格上所期望的那样。

我可能可以设法向排序算法添加更多案例,但是除了编写一个大的代码之外,还有更简单的方法来做我想做的事情吗?if .. return Ordering ...; block?


您没有展示如何填充或打印元组,所以这是一个猜测。翻转和/或否定部分坐标。我还建议使用sort_by_key因为它更容易,并且只需重用现有的元组比较:

fn main() {
    let mut points = [(0, 0), (1, 1), (1, 0), (0, 1)];
    points.sort_by_key(|&(x, y)| (!y, x));
    println!("{:?}", points);
}

在输出中添加额外的换行符:

[(0, 1), (1, 1),
 (0, 0), (1, 0)]

最初,这个答案建议否定该值((-y, x))。然而,作为弗朗西斯·加涅 (Francis Gagné) 指出 https://stackoverflow.com/questions/40274792/sorting-vector-of-x-y-coordinates#comment67810637_40275230,当值为最小值时,对于无符号整数或有符号整数,此操作会失败。对位取反恰好可以正常工作,但有点太“聪明”了。

如今,我会使用Ordering::reverse https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.reverse and Ordering::then https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.then为了清楚起见:

fn main() {
    let mut points = [(0u8, 0u8), (1, 1), (1, 0), (0, 1)];
    points.sort_by(|&(x0, y0), &(x1, y1)| y0.cmp(&y1).reverse().then(x0.cmp(&x1)));
    println!("{:?}", points);
}
[(0, 1), (1, 1),
 (0, 0), (1, 0)]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x/y 坐标的排序向量 的相关文章

  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 从向量获取特征对象引用

    我正在努力从 a 中获取元素Vec这是一生的参考 我将我的代码简化为 pub trait Runnable pub struct RunList lt a gt runnables Vec lt a mut Runnable gt impl
  • 按两列的最小值排序

    I use SQL Server 2008 R2 我需要按两列的最小值对表进行排序 该表如下所示 ID integer Date1 datetime Date2 datetime 我希望我的数据按至少两个日期排序 以这种方式对该表进行排序的
  • ggplot2 方面的内部排序

    我正在尝试在 ggplot2 中绘制一个方面 但我很难使不同方面的内部顺序正确 数据如下 head THAT EXT ID FILE GENRE NODE 1 CKC 1823 01 CKC Novels better 2 CKC 1824
  • Some() 在变量赋值的左侧做什么?

    我正在阅读一些 Rust 代码 并且遇到了这一行 if let Some path env args nth 1 这个函数内部 fn main if let Some path env args nth 1 Try reading the
  • clap::App 多次调用方法移动所有权

    即使阅读了有关引用所有权和借用的章节后 我仍然无法理解以下代码中的某些内容 这有效地阻止了我从clap App extern crate clap use clap App fn main let mut app App new name
  • 将正数放在负数之前

    所以我有在互联网上找到的这段代码 它采用负数和正数数组并重新排列数组 以便所有负数都在正数之前 但每个数字出现的位置必须保持相同 例如 如果我有 2 5 9 在有组织的数组中 2仍然必须是first的数量negative那些和 9必须是se
  • 为外国类型实现外国特征[重复]

    这个问题在这里已经有答案了 因此 我认为出于前向兼容性考虑 以防止在库中添加进一步的特征实现破坏使用类型特征的地方 有理由禁止孤立特征实现 并且它可能使编译变得更加困难 但我想知道 Rust 社区认为哪种解决方法是最理想的 以防万一这还不够
  • 如何限制Cargo.toml中的测试线程数?

    我的测试共享公共资源并且无法同时执行 这些测试失败cargo test 但与RUST TEST THREADS 1 cargo test 我可以修改测试以等待全局互斥体 但如果有任何更简单的方法来强制 我不想让它们混乱cargo为我设置这个
  • 按字段名称对命名元组列表进行排序的 Pythonic 方法

    我想对命名元组列表进行排序 而不必记住字段名的索引 我的解决方案看起来相当尴尬 希望有人能有一个更优雅的解决方案 from operator import itemgetter from collections import namedtu
  • 使用 Active Record 信誉系统 gem,当我按投票排序时不会发生排序

    遵循 RailsCast 的信誉系统 gem 我将以下代码添加到我的 microposts controller 中 def index microposts Micropost paginate page params page find
  • 为什么这不是悬空引用?

    我正在关注第二版TRPL 书 https doc rust lang org book second edition 第二版 并且对其中一项任务有点困惑 在 的最后第10 2节 https doc rust lang org book se
  • 如何在Python中手动对数字列表进行排序?

    规格 Ubuntu 13 04 Python 3 3 1 背景 Python的初学者 遇到了这个 手动排序 问题 我被要求做的事情 让用户输入 3 个数值并将它们存储在 3 个不同的变量中 不使用列表或排序算法 手动将这 3 个数字从小到大
  • 将 char 解析为 u32

    正如问题所述 我如何实现这一目标 如果我有这样的代码 let a 29 for c in a chars println c as u32 我得到的是 2 和 9 的 unicode 代码点 50 57 我想要的是将这些字符解析为实际的数字
  • 根据另一个列表的内容对列表进行排序

    我有一个包含整数列表的列表和另一个包含同时包含整数和字符串的类的列表 我想做的是按字母顺序对列表进行排序 将第一个列表中存在的条目放在前面 这是我的代码和预期输出 using System using System Collections
  • 为什么在闭包参数中使用“&&”?

    我有两个问题这个例子 https doc rust lang org std iter trait Iterator html method find let a 1 2 3 assert eq a iter find x x 2 Some
  • 将 self 的生命周期与方法中的引用联系起来

    I have derive Debug struct Foo lt a gt x a i32 impl lt a gt Foo lt a gt fn set mut self r a i32 self x r fn main let v 5
  • 难题:需要一个不允许排序和/或散列的“复杂”等价关系/分区的示例

    从问题 分区比排序更容易吗 https stackoverflow com questions 3256468 is partitioning easier than sorting 假设我有一个项目列表和一个 它们之间的等价关系 以及 比
  • 由于递归结构中存在冲突的要求,无法推断适当的生命周期

    当我尝试编译这段代码时 pub struct Context lt a gt pub outer Option lt a mut Context lt a gt gt impl lt a gt Context lt a gt pub fn
  • 在没有 std 的情况下将 *mut u8 转换为 &[u8]

    我正在为 WebAssembly 编写 Rust 代码来处理来自 JavaScript 的字符串 由于 WebAssembly 没有真正的字符串类型 因此我尝试传递一个指向 WebAssembly 内存对象的指针 该对象指向 UTF 8 编

随机推荐

  • Android AppWidget 配置 - 在新任务中启动

    我一直在寻找这个 所以我有一个应用程序小部件 它有一个配置活动 我可以在按下应用程序上的按钮时打开该活动 场景是 打开应用程序 使用主页按钮关闭应用程序 选择添加我的小部件 我已经配置了小部件 放置在我的主屏幕上 然后使用小部件上的按钮再次
  • 如何在perl中读取匹配字符串上方的n行?

    假设我有一个文件 xx txt 它包含数据 1 I am here 2 to work in 3 Perl for writing 4 a script for 5 myself 假设我想搜索字符串脚本并想显示三个 上面有几行 我该怎么办
  • int a=1, b=a++; 是否调用未定义的行为?

    Does int a 1 b a 调用未定义的行为 初始化之间没有序列点介入a及其在初始化程序中的访问和修改b 但据我所知 初始化不是对象的 修改 指定初始值设定项来给出对象的 初始值 根据 6 7 8 初始化 第 8 段 初始化器指定存储
  • 可以直接用二进制写程序吗?我怎样才能让计算机执行它?

    我知道这可能看起来很奇怪并且自找麻烦 但我认为体验古代程序员以前经历过的事情是很有趣的 那么如何执行仅用二进制编写的程序呢 假设我知道我在做什么 当然不使用汇编 我只想写一系列像111010111010101010101并执行它 那么我该怎
  • 如何使用 WPF 后台工作者

    在我的应用程序中 我需要执行一系列初始化步骤 这些步骤需要 7 8 秒才能完成 在此期间我的 UI 变得无响应 为了解决这个问题 我在一个单独的线程中执行初始化 public void Initialization Thread initT
  • -XX:+PrintGC 和 -verbose:gc 之间的区别

    我想了解以下之间的区别 XX PrintGC and verbose gc显然这些看起来很相似 本文没有列出verbose gc http www oracle com technetwork articles java vmoptions
  • 如何使用 TFS 构建服务器中的模板运行 NUnit 测试

    我需要使用 TFS Server 2010 中的工作流模板运行 nUnit 测试 我找到了下面所有解释如何配置构建服务器的参考资料 http morten lyhr dk 2008 05 using nunit and ncover wit
  • Error62:在 VBA 脚本中输入文件末尾以搜索目录中包含关键字的文件

    希望有人能够指出我误入歧途的地方 我创建了一个脚本来搜索目录中的所有文件 并返回包含已输入到单元格中的特定关键字的任何文件的文件路径和文件名 该脚本似乎适用于我在桌面上设置的测试文件夹 但是当我尝试搜索包含更多文件的另一个目录时 我收到 输
  • 自定义活动设计器中的参数验证

    我在验证自定义活动的设计器中正常工作时遇到问题 重现该行为的最简单示例如下 我有一个自定义 WF4 活动 其中包含存储在字典中的动态参数集合 Designer typeof DictionaryActivityDesigner public
  • Rand Index函数(聚类性能评估)

    据我所知 python 中没有可用于 Rand Index 的软件包 而对于调整后的 Rand Index 您可以选择使用sklearn metrics adjusted rand score labels true labels pred
  • 获取自己的标头 $Resource AngularJs

    我有 GO 语言的 REST API 和 Angularjs 的前端 但是当我以 Angular 形式获取资源时 我的自定义标头不存在 控制器 Persons query function data headerGetter status
  • 共享元素转换不适用于 Android 中的添加片段

    我观察到共享元素转换仅适用于 替换 方法 有什么方法可以使其与 add 方法一起使用 None
  • 使用php通过android volley发送图像[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在用数据和图像从 android 到 php 发布帖子 我正在 android 中缩小图像并对其进行 base 64 编码 当通过齐射
  • [Firestore][I-FST000001] 无法到达 Firestore 后端

    我已经配置了 Firebase Firestore 但 Firestore 曾返回此错误 Firestore I FST000001 无法到达 Firestore 后端 我正在使用 Swift 4 和 Xcode 9 有什么想法吗 2018
  • 程序部署后 JNI 找不到共享库

    将导出的 Java 项目从开发计算机移至生产环境后 我遇到了麻烦 java项目 一个Eclipse插件 有一个我写的JNI库 它依赖于一个开源库 而这个库又依赖于Boost 我在我的 SLES11 机器上编译了所有内容 包括 Boost 并
  • 使用节点 8 async/await 和 Angular 6 调试量角器时出错

    我无法让量角器调试器与节点 8 async await 和 Angular 6 一起使用 以旧方式返回到节点 7elementExplorer browser pause and browser debugger 不是一个选择 也因为在未来
  • Try and Catch on TSQL - catch 不捕获

    我有一个存储过程似乎没有正确记录其错误 代码出错 但 catch 块似乎没有生效 try 块相当长 但错误部分很简单并且就在最后 所以我已经精确说明了这一点 BEGIN TRY insert into tbl X select from t
  • 为什么我在此文件夹上收到 UnauthorizedAccessException?

    据 MSDN 报道 目录 存在 https msdn microsoft com en us library system io directory exists v vs 110 aspx如果目录不可访问 则应返回 false 我有一条路
  • 使用 jQuery 无法找到动态添加的 HTML 元素

    我正在 HTML 中实现一个树浏览器 单击节点时 我调用一个添加该节点的子元素的函数 到目前为止 一切都很好 我现在想立即调用其中一个子元素的单击处理程序来展开它 我的问题是 jQuery 找不到刚刚添加的子元素 当我在调试器中单步调试时
  • x/y 坐标的排序向量

    我有一个向量 u32 u32 表示 10 x 10 网格上坐标的元组 坐标未排序 因为标准sort函数也没有产生我想要的结果 我为他们编写了一个这样的排序函数 vec sort by a b if a 0 gt b 0 return Ord