在Scala里面如何使用元组

元组在Scala语言中是一种十分重要的数据结构,类似数据库里面的一行记录(row),它可以将不同类型的值组合成一个对象,在实际应用中十分广泛。

先来看一个简单的tuple定义:

上面的第二种例子中,可以直接通过name和age来访问单个tuple的元素

例子(1):

一个简单的模式匹配

例子(2):

根据类型匹配

注意上面的代码里面case后面的如果有List[String]类型的,最好用一个类封装起来在做匹配,否则会出错。具体的方式请参考: https://www.cakesolutions.net/teamblogs/ways-to-pattern-match-generic-types-in-scala

例子(3):

变量绑定模式

注意普通的类不能直接使用上面的模式匹配

例子(4):

for循环的使用元组进行的模式匹配

结果:

最后我们使用元组,来模拟一个类似下面的SQL的例子:

表(pet)结构:

统计SQL语句:

Scala完整代码如下:

其实,核心代码只有中间的这一部分:

最终结果:

简单解释一下核心部分的代码含义:

首先执行了一个groupBy函数,对元组里面的第一个元素也就是宠物名进行 分组,分组之后,每个宠物名一样的数据会聚合在一起,然后执行一个map函数,对里面的valueList进行各种运算,得出来我们 需要的结果后,最终再以Map的数据结构返回,因为Map本身是没法排序的,所以我们得先需要转成Seq类型,最后再执行sortWith方法对value里面的最大次数进行降序排,如果是升序排,只需要把大于号该成小于号即可。

总结:

本篇主要介绍了tuple几种常见的应用场景,通过使用tuple数据结构配合上scala强大的函数方法,我们可以轻松愉快的处理的各种数据集,感兴趣的小伙伴可以自己尝试一下。

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2018-01-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

STL源码剖析-hash_map / hash_multimap

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

1434
来自专栏Python专栏

Python 面试问答 Top 25

Python 是一种解释型,交互式,面向对象的高级编程语言。和别的一些使用标点符号的语言不同,Python使用了大量的英语单词作为关键字,因而具有很好的可读性。...

1273
来自专栏老九学堂

这是谁做的作业!C语言编码太不规范了...

1) 程序应采用缩进风格编写,每层缩进使用一个制表位(TAB),类定义、方法都应顶格书写;

1682
来自专栏Java帮帮-微信公众号-技术文章全总结

shell编程基础入门

shell编程基础入门 文章最后有下载shell学习指南电子书链接。 1.shell格式:例 shell脚本开发习惯 1.指定解释器 #!/bi...

3514
来自专栏公众号文章

Golang 入门系列(二)学习Go语言需要注意的坑

上一章节我们已经了解了 Go 环境的配置,不了解的,请查看前面的文章 https://www.cnblogs.com/zhangweizhong/p/94599...

1384
来自专栏小二的折腾日记

面试总结-C++

堆、栈、自由存储区、全局/静态存储区、常量存储区 自由存储区存储malloc申请的内存 (1)从静态存储区域分配 。内存在程序编译的时候就已经分配好,这块内存在...

1881
来自专栏菜鸟致敬

【lua菜鸟③】变量和循环

{lua的特点:①不需要分号结尾,但是支持分号啊,如果一行写多个语句就用它啊②没有花括号③函数也不需要声明类型,却和c++的语法极其类似}

1182
来自专栏Python爬虫与数据挖掘

Python正则表达式初识(八)

继续分享Python正则表达式的基础知识,今天给大家分享的特殊字符是“\w”和“\W”,具体的教程如下。

1255
来自专栏小勇DW3

设计模式--代理模式(附源码分析)

 在平时的开发过程中,我们实现方法的调用往往只是普通的对象调用方法,实现复杂的业务就是一层一层的对象调用方法依次进行实现,但是如果我要实现在某些方法执行前或者...

2433
来自专栏康怀帅的专栏

PHP 编码规范

PHP 编码规范。 关键字必须小写 true, false, null。 类 类的 属性 和 方法 必须添加访问修饰符(private、protected 以及...

3063

扫码关注云+社区

领取腾讯云代金券