我有一个整数元组的向量,并希望通过每个元组的第二个元素对其进行排序:
fn main() {
    let mut tuple_list2: Vec<(u16,u16)> = vec![(1,5),(0,17),(8,2)];
    tuple_list2.sort_by(|a,b| a.1.cmp(b.1));
}

编译器抛出一个错误,因为b.1是一个u16而不是对一个(& u16)的引用.我可以通过引用b.1来解决这个问题:

fn main() {
    let mut tuple_list2: Vec<(u16,b| a.1.cmp(&b.1));
}

我不明白我为什么要这样做.特别是因为我也不需要引用a.1.

解决方法

正如aurora0001已经在评论中指出的那样,我们应该看看 the function signature of cmp()
fn cmp(&self,other: &Self) -> Ordering

我们看到这两个值都是通过引用来获取的,所以你不得不将& b.1传递给方法而不是b.1.

Especially because I do not need to reference a.1,either.

这是一个更有趣的问题;-)

简单的解决方案就是,. (点)运算符执行自动解除引用以及自动借用.让我们看看它的实际效果:

struct Foo;

impl Foo {
    fn takes_value(self) {}
    fn takes_ref(&self) {}
    fn takes_mut_ref(&mut self) {}
}

fn main() {
    let mut a = Foo;

    // all of those work thanks to auto-borrowing
    a.takes_ref();
    a.takes_mut_ref();
    a.takes_value();

    // --------
    let b = Foo;
    let c = &mut b;

    // these work as well
    c.takes_ref();
    c.takes_mut_ref();

    // this one works,*if* the type implements `copy`
    c.takes_value();
}

所以 .运算符可以帮助程序员并始终传递正确的自我参数.

注意:你做的排序很常见.有一种方法更适合这项任务:[T]::sort_by_key().它看起来像这样:

// note: type annotations not required
let mut tuple_list2 = vec![(1,2)];
tuple_list2.sort_by_key(|k| k.1);

对元组向量进行排序需要第二个值的引用吗?的更多相关文章

  1. xcode – XCTest一个元组

    我正在尝试构建一个单元测试:但是Xcode给了我一个错误:无法使用类型的参数列表调用’XCTAssertEqual’是否有不同的方法来测试元组而不提取其成员并单独测试?解决方法XCTAssertEqual要求传递给它的两个参数是Equatable,您可以从方法签名中看到它们.注意,expression1返回T?,T必须是Equatable:但是Swifttuplesaren’tEquatable,所以你不能将它们与XCTAssertEqual一起使用.元组确实有一个==方法–它们只是不符合协议–所以你可以

  2. ios – 在NSUserDefaults中保存一个元组

    我正在使用一个元组来存储这样的东西.现在我想将它保存在NSUserDefaults中.但是我收到以下错误.类型'’不符合协议’AnyObject’我该如何解决这个问题?

  3. 一 Swift学习之基础部分

    **一Swift学习之基础部分————–借鉴老码团队翻译组-Tyrion**//1.1常量和变量letsum=0//声明常量,值不可修改varnumber=1//声明变量,值可修改varx=0.0,y=1.0,z=2.0//在一行声明多个常量或变量用逗号隔开//1.2类型标注//声明常量或变量时可以加上类型标注,表示这个常量或变量存储的类型,但是如果你没有添加类型,而是赋了初始值,swift会自己推断类型letnum:Int=0varstr:String?Swift提供了两种有符号浮点数类型:Double

  4. Swift语法基础:10 - Swift的布尔值, 元组, 可选, 断言

    3.一个可选值现在是nil,但是后面的代码运行需要一个非nil值。

  5. Swift教程 第一章 基础部分

    Swift是iOS和OSX应用开发的一门新语言,Swift的类型是在C和Object-C的基础上提出来的。Int是整型,Double和Float是浮点型,Bool是布尔型,String是字符串。Swift还有两个常用的集合类型:Array数组和Dictionary字典。除了我们熟悉的类型,Swift还增加了Object-C中没有的类型,比如元组。Swift还增加了可选类型,用于处理值缺失的情况。常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。

  6. Swift教程07-基本数据类型(三)元组类型tuple

    元组乃何方神圣?

  7. swift语言-元组

    可以使用隐氏类型推断,也可以有类型标注。例子如下:2元组数据的访问1.使用下标访问,这种访问方式类似于获得数组元素。下标也是从0开始的。用一组变量组和元组值进行对应。让键值参数在元组的圆括号内。

  8. Swift学习:3.元祖

    元组元组把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。下面这个例子中,是一个描述HTTP状态码的元组。HTTP状态码是当你请求网页的时候web服务器返回的一个特殊值。如果你请求的网页不存在就会返回一个404NotFound状态码。如果你的数据结构并不是临时使用,请使用类或者结构体而不是元组。

  9. Swift学习—元组类型

    知识点:元组数据中的元素可以有名称也可以没有名称元组数据中的元素可以为空元素访问可以通过元素名称或者下标声明成var的元组数据中的元素可以被改变可以指定元素的类型可以用多个变量接收元组数据可以将元素分别赋值给多个变量可以用下划线_忽略某个元素的值,从而取出其他的元素示例代码:

  10. Swift-元组tuple

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部