Scala lists maps sets tuples arrays and ranges

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;@fa36558

var myList = Array(1.9, 2.9, 3.4, 3.5)

// Print all the array elements
for ( x <- myList ) {
  println( x )
}

// Summing all elements
var total = 0.0;
for ( i <- 0 to (myList.length - 1)) {
  total += myList(i);
}
println("Total is " + total);

// Finding the largest element
var 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 matrix
for (i <- 0 to 2) {
  for ( j <- 0 to 2) {
    myMatrix(i)(j) = j;
  }
}

// Print two dimensional array
for (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 elements
for ( x <- myList3 ) {
  println( x )
}

var my1 = range(10, 20, 2)
var my2 = range(10,20)

// Print all the array elements
for ( 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 type
var s1 : Set[Int] = Set()

// Set of integer type
var 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 ++ fruit2
println( "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 elements
println( "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 += 4
s -= 2
println(s)


List

println("hello list , scala")

// List of Strings
val fruit: List[String] = List("apples", "oranges", "pears")

// List of Integers
val nums: List[Int] = List(1, 2, 3, 4)

// Empty List.
val empty: List[Nothing] = List()

// Two dimensional list
val dim: List[List[Int]] =
List(
  List(1, 0, 0),
  List(0, 1, 0),
  List(0, 0, 1)
  )

val Nil_list = Nil

println(fruit)
println(nums)
println(empty)
println(dim)
println(Nil_list) //List()


// Scala List 独特的 连接运算“::”(cons)和“:::”

// “::” 这个运算符要求前一个是 元素, 后一个是 List。
// 两个都是 元素 或 都是 List,是不对的。
// 如果两个都是List,要用 三个冒号的“:::”。
// Nil 表示空的list-empty list


// List of Strings
val fruit_kk = "apples" :: ("oranges" :: ("pears" :: Nil))

// List of Integers
val nums_kk = 1 :: (2 :: (3 :: (4 :: Nil)))

// Empty List.
val empty_kk = Nil

// Two dimensional list
val dim_kk = (1 :: (0 :: (0 :: Nil))) ::
(0 :: (1 :: (0 :: Nil))) ::
(0 :: (0 :: (1 :: Nil))) :: Nil

println(fruit_kk)
println(nums_kk)
println(empty_kk)
println(dim_kk)

val qwer = nums_kk ::: dim_kk
println(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 immutable
val 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) //遍历tuple

val 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 )} //遍历tuple

val 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 instead
val 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._4
println( "Sum of elements: "  + sum )
println("Concatenated String: " + ttttt.toString() )


Map

08111246_R8IB.gif

import scala.collection.mutable.Map
import java.util.Calendar

println("scala map")

//基本的映射关系
//可变mutable map
val extensions = Map("steve" -> 100, "bob" -> 101, "joe" -> 201)
println(extensions("steve")) //根据key获取value
println(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() //声明一个空的map
for ((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 10
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> 1 until 10
res1: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)

scala> 1 to 10 by 3
res2: scala.collection.immutable.Range = Range(1, 4, 7, 10)

scala> 10 to 1 by -3
res3: scala.collection.immutable.Range = Range(10, 7, 4, 1)

scala> 1L to 10L by 3
res4: scala.collection.immutable.NumericRange[Long] = NumericRange(1, 4, 7, 10)

scala> 1.1f to 10.3f by 3.1f
res5: scala.collection.immutable.NumericRange[Float] = NumericRange(1.1, 4.2, 7.2999997)

scala> 1.1 to 10.3 by 3.1
res9: scala.collection.immutable.NumericRange[Double] = NumericRange(1.1, 4.2, 7.300000000000001)

scala> 'a' to 'g' by 3
res6: scala.collection.immutable.NumericRange[Char] = NumericRange(a, d, g)

scala> BigInt(1) to BigInt(10) by 3
res7: scala.collection.immutable.NumericRange[BigInt] = NumericRange(1, 4, 7, 10)

scala> BigDecimal(1.1) to BigDecimal(10.3) by 3.1
res8: scala.collection.immutable.NumericRange.Inclusive[scala.math.BigDecimal] = NumericRa

scala>

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

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

scala> 1990 until 2011 toList
warning: there was one feature warning; re-run with -feature for details
res10: 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 toArray
warning: there was one feature warning; re-run with -feature for details
res11: 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 10

for (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

.......

官网文档,

http://docs.scala-lang.org/overviews/collections/maps.html

还有这篇博文

http://www.ivanpig.com/blog/?p=464

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值