博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala lists maps sets tuples arrays and ranges
阅读量:5764 次
发布时间:2019-06-18

本文共 9489 字,大约阅读时间需要 31 分钟。

hot3.png

Scala lists maps sets tuples arrays and Ranges

Array

println("hello array , scala")var z:Array[String] = new Array(3)println(z) //[Ljava.lang.String;@fa36558var myList = Array(1.9, 2.9, 3.4, 3.5)// Print all the array elementsfor ( x <- myList ) {  println( x )}// Summing all elementsvar total = 0.0;for ( i <- 0 to (myList.length - 1)) {  total += myList(i);}println("Total is " + total);// Finding the largest elementvar max = myList(0);for ( i <- 1 to (myList.length - 1) ) {  if (myList(i) > max) max = myList(i);}println("Max is " + max);/// 多维数组/import Array._// Multi-Dimensional Arrays:// 多维数组var myMatrix = ofDim[Int](3,3)// build a matrixfor (i <- 0 to 2) {  for ( j <- 0 to 2) {    myMatrix(i)(j) = j;  }}// Print two dimensional arrayfor (i <- 0 to 2) {  for ( j <- 0 to 2) {    print(" " + myMatrix(i)(j));  }  println();}/// 多维数组/// scala 连接两个数组var myList1 = Array(1.9, 2.9, 3.4, 3.5)var myList2 = Array(8.9, 7.9, 0.4, 1.5)var myList3 =  concat( myList1, myList2)// Print all the array elementsfor ( x <- myList3 ) {  println( x )}var my1 = range(10, 20, 2)var my2 = range(10,20)// Print all the array elementsfor ( x <- my1 ) {  print( " " + x ) // 10 12 14 16 18}println()for ( x <- my2 ) {  print( " " + x ) // 10 11 12 13 14 15 16 17 18 19}

Set

08111214_TnUp.gif

println("hello set , scala")// Empty set of integer typevar s1 : Set[Int] = Set()// Set of integer typevar s2 : Set[Int] = Set(1,3,5,7)var s3 = Set(1,3,5,7)println(s1)println(s2)println(s3)val fruit = Set("apples", "oranges", "pears")val nums: Set[Int] = Set()println( "Head of fruit : " + fruit.head )println( "Tail of fruit : " + fruit.tail )println( "Check if fruit is empty : " + fruit.isEmpty )println( "Check if nums is empty : " + nums.isEmpty )val fruit1 = Set("apples", "oranges", "pears")val fruit2 = Set("mangoes", "banana")// use two or more sets with ++ as operator// 使用 ++ 运算符var fruit3 = fruit1 ++ fruit2println( "fruit1 ++ fruit2 : " + fruit3 )// use two sets with ++ as method// .++ 方法val fruit4 = fruit1.++(fruit2)println( "fruit1.++(fruit2) : " + fruit4 )val num_test = Set(5,6,9,20,30,45)// find min and max of the elementsprintln( "Min element in Set(5,6,9,20,30,45) : " + num_test.min )println( "Max element in Set(5,6,9,20,30,45) : " + num_test.max )val num1 = Set(5,6,9,20,30,45)val num2 = Set(50,60,9,20,35,55)// find common elements between two sets// .& 共同的元素println( "num1.&(num2) : " + num1.&(num2) )// intersect 交集println( "num1.intersect(num2) : " + num1.intersect(num2) )// 交集:println(Set(1,2,3) intersect Set(2,4))// 并集:println( Set(1,2,3) ++ Set(2,4))// 差集:println( Set(1,2,3) -- Set(2,4)) //得到 Set(1,3)println(Set(1,2,3) + (2,4))// 遍历set 集合for( e <- fruit3) {  println(e)}// set集合元素的访问 println(fruit3("apples")) //true// set集合元素的访问 println(fruit3("appes"))  //false// 以上是不可变 set 集合,collection.mutable.Set 是可变set 集合val s = collection.mutable.Set(1, 2, 3)println(s)s += 4s -= 2println(s)

List

println("hello list , scala")// List of Stringsval fruit: List[String] = List("apples", "oranges", "pears")// List of Integersval nums: List[Int] = List(1, 2, 3, 4)// Empty List.val empty: List[Nothing] = List()// Two dimensional listval dim: List[List[Int]] =List(  List(1, 0, 0),  List(0, 1, 0),  List(0, 0, 1)  )val Nil_list = Nilprintln(fruit)println(nums)println(empty)println(dim)println(Nil_list) //List()// Scala List 独特的 连接运算“::”(cons)和“:::”// “::” 这个运算符要求前一个是 元素, 后一个是 List。// 两个都是 元素 或 都是 List,是不对的。// 如果两个都是List,要用 三个冒号的“:::”。// Nil 表示空的list-empty list// List of Stringsval fruit_kk = "apples" :: ("oranges" :: ("pears" :: Nil))// List of Integersval nums_kk = 1 :: (2 :: (3 :: (4 :: Nil)))// Empty List.val empty_kk = Nil// Two dimensional listval dim_kk = (1 :: (0 :: (0 :: Nil))) ::(0 :: (1 :: (0 :: Nil))) ::(0 :: (0 :: (1 :: Nil))) :: Nilprintln(fruit_kk)println(nums_kk)println(empty_kk)println(dim_kk)val qwer = nums_kk ::: dim_kkprintln(qwer)// Reverse List Order:val fruit_oo = "apples" :: ("oranges" :: ("pears" :: Nil))println( "Before reverse fruit : " + fruit_oo )println( "After reverse fruit : " + fruit_oo.reverse )// Tabulating a Function:val mul = List.tabulate( 4,5 )( _ * _ )      println( "mul : " + mul  )// Repeats apples three times.val fruit_re = List.fill(3)("apples") println( "fruit : " + fruit_re  )// Repeats 2, 10 times.val num_re = List.fill(10)(2)        println( "num : " + num_re  )

Tuple

元组(Tuple)

笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组。

元组是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为记录

println("hello tuple , scala")//a tuple can hold objects with different types but they are also immutableval t = (1, "hello", Console) //定义一个tuple 元组println(t)println(t._1) //访问tuple 的元素println(t._2)println(t._3)val tuple = Tuple3(234,"sdsdsd",Console)println(tuple)def getUserInfo = ("Al", 42, 200.0) //定义一个函数,函数返回元组println(getUserInfo)t.productIterator.foreach(println) //遍历tupleval tuple_hello = Tuple2(1,"fsdsfdf")println(tuple_hello)val tuple_t4 = Tuple4(23,234,"sdsd","ytu")println(tuple_t4)tuple_t4.productIterator.foreach{ i => println("Value = " + i )} //遍历tupleval pair = Pair(2,5);println("pair="+pair)// E:\test-scala\tuple_hello.scala:34: error: not found: value Tuple34// val tuple_any = Tuple34()//                 ^// one error found// val tuple_any = Tuple34()  //仅支持到Tuple22// println(tuple_any)// Deprecated// (Since version 2.11.0) Use built-in tuple syntax or Tuple3 insteadval triple = Triple(1,"w323",Console) //三元组 same as Tuple3 (1,"two",3.0) or (1,"two",3.0)println("triple===="+triple)val ttttt = (4,3,2,1)val sum = ttttt._1 + ttttt._2 + ttttt._3 + ttttt._4println( "Sum of elements: "  + sum )println("Concatenated String: " + ttttt.toString() )

Map

08111246_R8IB.gif

import scala.collection.mutable.Mapimport java.util.Calendarprintln("scala map")//基本的映射关系//可变mutable mapval extensions = Map("steve" -> 100, "bob" -> 101, "joe" -> 201)println(extensions("steve")) //根据key获取valueprintln(extensions("bob"))println(extensions("joe"))def hello_function(m: Int): Int = {  m + 2}//映射函数extensions += ("function" -> hello_function(1))println(extensions("function"))extensions += ("1" -> 1)extensions += ("2" -> 1)extensions += ("3" -> 3)extensions += ("Monday" -> Calendar.MONDAY)extensions += ("Tuesday" -> Calendar.TUESDAY)extensions += ("Wednesday" -> Calendar.WEDNESDAY)extensions += ("Thursday" -> Calendar.THURSDAY)extensions += ("Friday" -> Calendar.FRIDAY)extensions += ("Saturday" -> Calendar.SATURDAY)extensions += ("Sunday" -> Calendar.SUNDAY)extensions.foreach(arg => println(arg))println("===============================")for (e <- extensions) { //相当于遍历entry  println(e)}for ((k, v) <- extensions) { //可以的到key-value 对偶  println("[key=" + k + ",vlue=" + v + "]")}for (k <- extensions.keySet){  println(k)}// 单独拿出值for (v <- extensions.values){  println(v)}//不可变集合val scores = scala.collection.immutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8) for ((k, v) <- scores) { //可以的到key-value 对偶  println("[key=" + k + ",vlue=" + v + "]")}println("============================")val mutable_map: Map[String,Integer] = Map() //声明一个空的mapfor ((k, v) <- scores) { //可以的到key-value 对偶  mutable_map += (k -> v)}println(mutable_map)val map2: Map[String,Int] = Map()for ((k, v) <- extensions) { //可以的到key-value 对偶  map2(k) = v  //改变k 的值}println(map2)val map43 = new java.util.TreeMap[String,Int]for( (k,v) <- extensions) {  map43.put(k,v) //TreeMap的put方法,也是map的put方法}println(map43)

Range

以下是在scala的命令行中做的测试

scala> 1 to 10res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)scala> 1 until 10res1: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)scala> 1 to 10 by 3res2: scala.collection.immutable.Range = Range(1, 4, 7, 10)scala> 10 to 1 by -3res3: scala.collection.immutable.Range = Range(10, 7, 4, 1)scala> 1L to 10L by 3res4: scala.collection.immutable.NumericRange[Long] = NumericRange(1, 4, 7, 10)scala> 1.1f to 10.3f by 3.1fres5: scala.collection.immutable.NumericRange[Float] = NumericRange(1.1, 4.2, 7.2999997)scala> 1.1 to 10.3 by 3.1res9: scala.collection.immutable.NumericRange[Double] = NumericRange(1.1, 4.2, 7.300000000000001)scala> 'a' to 'g' by 3res6: scala.collection.immutable.NumericRange[Char] = NumericRange(a, d, g)scala> BigInt(1) to BigInt(10) by 3res7: scala.collection.immutable.NumericRange[BigInt] = NumericRange(1, 4, 7, 10)scala> BigDecimal(1.1) to BigDecimal(10.3) by 3.1res8: scala.collection.immutable.NumericRange.Inclusive[scala.math.BigDecimal] = NumericRascala>

Range 支持的类型从上面可以看到有 Long , Float ,Double, Char , BigInt , BigDecimal

也可以把一个Range 类型 转换成 List 类型,如下,

scala> 1990 until 2011 toListwarning: there was one feature warning; re-run with -feature for detailsres10: List[Int] = List(1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010)scala>

把 Range 类型转换为 Array 类型,如下,

scala> 1990 until 2011 toArraywarning: there was one feature warning; re-run with -feature for detailsres11: Array[Int] = Array(1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010)scala>

对Range 类型的遍历

ranges_app_main.scala

for (a <- 1 to 10) {  println("Value of a: " + a);}val r = 1 to 10for (a <- r) {  println("Value of a: " + a)}r.foreach((i: Int) => println("value i:" + i))

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft>scala ranges_app_main.scala

Value of a: 1

Value of a: 2

.......

官网文档,

还有这篇博文

================================END================================

转载于:https://my.oschina.net/xinxingegeya/blog/371149

你可能感兴趣的文章
Centos7同时运行多个Tomcat
查看>>
使用CocoaPods过程中的几个问题
查看>>
我的友情链接
查看>>
为eclipse安装maven插件
查看>>
公司新年第一次全员大会小记
查看>>
JAVA8 Stream 浅析
查看>>
inner join on, left join on, right join on要详细点的介绍
查看>>
SAS vs SSD对比测试MySQL tpch性能
查看>>
Spring boot 整合CXF webservice 全部被拦截的问题
查看>>
Pinpoint跨节点统计失败
查看>>
【Canal源码分析】Canal Server的启动和停止过程
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
[转载] 中华典故故事(孙刚)——19 万岁
查看>>
Maven学习总结(十)——使用Maven编译项目gbk的不可映射问题
查看>>
php5编译安装常见错误和解决办法集锦
查看>>
Linux远程访问及控制
查看>>
MongoDB实战系列之五:mongodb的分片配置
查看>>
Unable to determine local host from URL REPOSITORY_URL=http://
查看>>