scala初学之Tuple、Array、Map、文件操作入门实战

特此声明,本文中的代码 部分或全部来源王家林的scala教程;虽然王家林一直被大家所诟病,而且也无法确定这些scala的程序代码是不是他的。但是作为一个初学者觉得就算代码不是他的,他只是拿过来翻译一次,看他的视频也是能了解一些东西的;但是很多东西讲的确实欠缺;所以在学习的过程中把自己的很多思考注释到了他的代码中。一是当作自己的备忘,二也希望能够给大家带来一些些的帮助。

 

 

/*** @author user*tuple 这个东西我最初接触实在storm中,在storm中消息都被封装在tuple中,* 后来发现在python中也有tuple* 可见tuple已经被广泛的作为一种数据结构被使用了* 其实tuple的实质很简单,就是一组数据的组合,累死于object数组 * */
object TupleOps {def main(args:Array[String]):Unit={/*定义一个triple的tuple变量 在sacla中定义一个tuple只需要用()把你要放的一堆数据放进去,然后用逗号分割就可以了* 在这里,定义了一个有三个元素的tuple,第一个是100(整数),第二个是SCALA(字符串),第三个是0.2(Double)* 在开始说tuple和Object数组类似,但是在scala中,你把鼠标放在triple变量上的时候会显示:* val triple : (Int,String,Double) 而不是 val triple : (Object,Object,Object)* 说明scala已经通过类型推导确定了triple中三个值的类型;这也就让我们在使用tuple的时候,每一个值都能有了明确的类型,不用去类型转换了。* */val triple = (100,"SCALA",0.2)/*分别输出triple中的第一个,第二个,第三个值*/println(triple._1)println(triple._2)println(triple._3)/*延伸一下下* 我们可以定义一个匿名的tuple 就像下面那样 val(a,v,_)=triple* 这样,我们不知这个tuple的具体名字,却知道tuple中的值的名字,所以可以直接使用a和v* 在下面就在println中使用了a和v来打印匿名tuple中的第一个和第二个值* 最后一个是_,这个_表示我不关心这个值的名称,可以有任意多个;(只要你不想关心的tuple中的某个值,就给他取名字叫_)* 这样在下面的方法中就无法使用了。 _的出现的最主要的原因是你接收值的tuple的值的个数必须和给这个tuple返回的赋值* tuple的值的个数相同。 就如同下面,返回了三个值,我不关心第三个,但是又必须在()里面有三个值的名称,可是我只用* 两个,第三个起个名字还要费脑子啊--所以_就是最佳的选择了。* */val (a,v,_) =tripleprintln(a)println(v)}
}

 

 

 

 

 

 

/*** * 在scala中失去了String x [] = new String[10];这样定义数组的机会* 所有的数组都封装成了Array对象来使用* * */def main(args:Array[String]):Unit={/*定义一个Array,初始序列位1,2,3,4,5 * 这里直接写 val array = Array(1,2,3,4,5)* 其实用到了Array类的伴生对象* 具体来说,就是我们定义了一个class Array //(1) 然后定义一个 object Array //(2)* 那么(2)就是(1)的伴生对象* 在伴生对象中可以定义一个apply(.....这里的参数由自己定义)方法* 这个apply一般就是在伴生对象中区初始化一个类的对象* 也就是在(2)中通过apply来初始化一个(1)的具体对象* 所以可以有 val array = Array.apply(1,2,3,4,5)* 然后scala做了优化,就变成了Array(1,2,3,4,5)就是调用apply方法 * *//*鼠标放到array上面,可以看到array的类型   val array:Array[Int]*/val array = Array(1,2,3,4,5)/*由上面可以知道,我们这样写也是正确的 在这里我们指明了 array_1是一个数组 并且数组内的元素都是Int*/val array_1:Array[Int] = Array(6,7,8,9,10)/*所以  下面这样是错的 因为根本就不是array*///val  array_2:Array =2/*下面这样也是错的 因为数组元素不对应*///val array_3:Array[Int]=Array("1","2")/*要获得数组中的某个元素,直接使用 .apply(index) 方法*/println(array_1.apply(2))/*apply方法可以简写为 */println(array_1(2))/*在scala中,的Array是不变量  也就是所一旦被创建,那么大小,内容就都不会改变了* 所以我们无法改变Array的长度以及内容* *//*但是在scala中还是提供了 .+: 这样的方法,这个方法允许我们把当前array的数组元素的超类和当前array的全部元素* 合并为一个新的array并返回*/val array_x=array.+:(10) //生成了一个新的数组,以前的array还是那个array没有任何改变;array_x的内容位 10,1,2,3,4,5/*同时可以直接和一个数组合并,生成一个新的数组*/val array_y=array.++:(array_1) //array_y的内容位 6,7,8,9,10,1,2,3,4,5 都是在前面插入/*也可以通过new的方式来创建  在创建的时候指定了泛型的类型 和数组的长度  长度是必须指定的,泛型不写就是Nothing,具体效果还没有研究过)*//*但是Array默认是不可改变的,所以个人感觉这样来创建Array的意义不大。  后面会有可变的Array*/val arr0:Array[String] =new Array(10)val arr1 =new Array[String](10)/*for循环来遍历数组*/for(i <- 0 until array.length){println(array(i))}/*增强for循环*/for(elem <- array) println(elem)}
}

 

 

 

 

 

 

import scala.collection.Map
import scala.collection.immutable.HashMapobject MapOperations {def main(args:Array[String]):Unit={/** 在scala中,定义一个Map和Array差不多* 这里也是使用Map类的伴生对象来创建ages* 其原理也是调用Map伴生对象中的apply方法来实例化* * Map的很多方面和Array很相似,* *//*这里在初始化的时候,要同时放入key和value* 在scal中就使用 key->value来表示一个key value对* */val ages =Map("Rocky"->27,"Spark"->5)val agess=Map("LL"->2,"PP"->3)val ages1=ages.+(("S",2))//返回一个新的Map 新的Map中包含了ages的所有元素和 "S"->2val ages2=ages.++:(agess)//返回一个新的Map 新的Map中包含了ages和agess的所有元素/*通过for循环来遍历Map* 不得不说scala确实简化了好多操作* 在java中要遍历一个map是这样的* for(Entry<String, String> en:new HashMap<String,String>().entrySet()){* ......................* }* 在scala中只需要 (k,v) <-ages 就可以了*             (k,v)是一个匿名的tuple,前面说过 可见ages的迭代返回tuple 第一个是key 第二个是value* */for((k,v) <-ages){println("Key is : "+k+" Value is : "+v)}println("----------------------------------------------")for((k,_) <-ages){//同样的,如果我们只关心key,那么v可以用_来代替println("Key is : "+k)}}
}

 

import scala.io.Sourceobject FileOps {/*** 这里其实没什么内容,就是Source的两个方法* 一个从本地读,一个从网址读* 而且用起来真的很爽,不用关心异常,不用去关闭流···* * */def main(args:Array[String]):Unit={/*只要记住Source就是要操作的资源  要从文件取,就fromFile 要从网址取就fromURL*/val file = Source.fromFile("E:\\test.txt")val urlFile=Source.fromURL("http://spark.apache.org/")for(line <- file.getLines()){//通过for循环来一行一行的输出 file.getLines()返回一个文件内容的按行迭代println(line)}for(line <- urlFile.getLines()){//同上println(line)}}
}

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java连载3-编译与运行阶段详解JRE,JDK,JVM关系

一、 1.JDK下载地址&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html 二、Java的加载与执行 1.Java程序运行包括&#xff1a; &#xff08;1&#xff09;编译阶段&#xff1a;检查Java源程序是否符合Java语法&#xff0c;符…

KMP算法NEXT数组纯手工生成

用一个实际的例子来说明&#xff0c;经历了看懂&#xff0c;看不懂&#xff0c;看懂&#xff0c;看不懂&#xff0c;看懂...后我终于决定把它记下来了。 例子字符串为&#xff1a;abaabaca 首先可以肯定&#xff0c;第一个位置永远位0&#xff0c;第二个位置永远为1.那么可以…

P1078 文化之旅

题面 这题好像是初二时老师讲过的一道题&#xff0c;但是。。我没听&#xff1f;&#xff1f;反正没交过就对了。。 我本来想的是深搜spfa&#xff0c;写到50行实现不了&#xff1f;&#xff1f;果断看tj&#xff0c;floyd&#xff1f;&#xff1f;&#xff1f;&#xff08;黑人…

KMP算法中NEXT数组的作用以及代码实现

在http://blog.csdn.net/u012613903/article/details/79004094中写到了如何手工去求一个NEXT数组&#xff0c;这个在很多考试中可以用来解题。但是在实际的使用中&#xff0c;NEXT数组究竟发挥着什么样的作用&#xff0c;如何用代码实现KMP算法呢&#xff1f; KMP算法是用来确…

最长公共连续子串

给出两个字符串&#xff08;可能包含空格&#xff09;,找出其中最长的公共连续子串,输出其长度。 注意这里是找连续子串。 算法&#xff1a;动态规划。f[i][j]表示第一个字符串前i个字符中与第二个字符串前j个中的最长连续子串长度 那么状态转移为&#xff1a;当s1(i)s2(j)时&a…

求最长回文串-从动态规划到马拉车之路(上)

要解决的问题&#xff1a; 给定一个字符串&#xff0c;要求求出这个字符串中的最长的回文串子串。 例子&#xff1a; cbddba的最长回文子串为 bddb cbdedba的最长回文子串为dbedb 由上面的例子可以看到&#xff0c;在考虑回文子串的问题时需要考虑奇偶性。因为奇回文关于中…

为什么Python中称__lt__、__gt__等为“富比较”方法

Python中基类object提供了一系列可以用于实现同类对象进行“比较”的方法&#xff0c;可以用于同类对象的不同实例进行比较&#xff0c;包括__lt__、__gt__、__le__、__ge__、__eq__和__ne__六个方法。 那么为什么叫“富比较”(“rich comparison”)方法呢&#xff1f;查了相关…

求最长回文串-从动态规划到马拉车之路(下)

预备知识&#xff1a; &#xff08;1&#xff09;在一个数轴上有两点i和j&#xff08;i<j&#xff09;关于点m对称&#xff0c;那么有 i 2m-j&#xff1b; 证明&#xff1a; 因为 i<j 且 i 和 j 关于 m 对称&#xff0c;那么有 &#xff08;i j&#xff09;/ 2 m 所…

项目管理实战之团队管理 (转自:zhuweisky)

一个系统不仅需要优秀的分析和设计&#xff0c;更需要一个良好的过程将其从蓝图转化为实现。这个过程中最重要的是对团队的管理&#xff0c;也就是人的管理。一个优秀的团队和一个糟糕的团队的效能是天壤之别&#xff0c;她们之间的比例不是1:100或1:1000这样量化的数字能够表示…

python3 内置方法

# -*- coding:utf-8 -*- # Author: Evan Mi import functools # 取绝对值 print(abs:, abs(-1)) # 如果一个可迭代对象的所有元素都为真&#xff0c;返回true ;空也返回真 print(all:, all([1, 0, -3])) # 有一个为真就全为真 print(any:, any([1, 0, -1])) # 变成可打印的字符…

JS 职责链模式

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><script>/*职责链模式 所有对象依次处理请求&#xff0c;1不能处理传给2&#xff0c;2不能处理传给3....*//*场景 打折 100以下不打折&…

python3字符串常用操作

# -*- coding:utf-8 -*- # Author: Evan Miname "my name is alex"print(name.capitalize()) # 首字母大写 print(name.count("a")) # 统计整个字符中a的个数 print(aaaaa.count("a", 0, len(aaaaa)-1)) # 前闭后开 print(name.center(50, &…

通过NGINX location实现一个域名访问多个项目

location ~ \.php$ {   root /home/webroot; //此目录下有多个项目 project1 &#xff0c;project2...   fastcgi_pass $php_upstream;   fastcgi_index index.php;   include fastcgi.conf; } location ~/project1 {   index index.php;   fastcgi_pass $php_u…

python3 set相关操作

# -*- coding:utf-8 -*- # Author: Evan Mi# 创建一个set list_1 [1, 3, 5, 7, 3, 6, 7, 9] list_1 set(list_1) list_2 set([2, 6, 0, 66, 22, 8, 4]) print(list_1, type(list_1))# 交集 print(list_1.intersection(list_2)) print(list_1 & list_2) # 并集 print(lis…

JDK环境变量

下载打开如下链接&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html &#xff0c;进入JDK1.8下载官网&#xff0c;或者直接百度JDK1.8&#xff0c;也可进入下载官网。 进入官网后&#xff0c;按照所给信息下载对应系统版本的J…

python3字典相关方法

# -*- coding:utf-8 -*- # Author: Evan Miinfo {stu1101: TengLan Wu,stu1102: LongZe Luola,stu1103: XiaoZe Maliya } # 字典是无序的 print(info) print(info[stu1101]) # 不存在会报错 print(info.get(stu1101)) # 不存在返回None print(stu1103 in info) # 判断是否…

Shadow Defender 语言文件并注册

:: ::关闭回显 echo off ::设置标题 title 覆盖 Shadow Defender 语言文件并注册:: ::获取管理员权限 set "_FilePath%~f0" set "_FileDir%~dp0" setlocal EnableExtensions EnableDelayedExpansion fltmc >nul 2>&1 || (echo Set UAC CreateOb…

python3 列表相关操作

# -*- coding:utf-8 -*- # Author: Evan Mi import copynames ["ZhangYang", "Guyun", "XiangPeng", "XuliangChen"] #创建一个列表 names.append("LeiHaiDong") # 给列表的末尾追加元素 names.insert(1, "ChenRongHu…

NickLee 多層菜單

void InitMenu(){ //初始化菜單 MenuItem menuFirst; DataSet dsPermit; UserInfo ui ; DataSet dsFfunc.GetDataTable("select * from cqsSystemTree where F_Parent000 and isValid1 order by showSort"); foreach (DataRow myrow in dsF.Tables[0].Rows…

python3 生成器

要说生成器&#xff0c;就必须首先要知道列表的概念&#xff1b; 我们创建一个如下的列表&#xff1a; ls [1,2,3,4,5,6,7,8,9] 那么就开辟了一个门牌号为ls的内存区&#xff0c;然后真的把1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&…