[转帖]scala day2_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3079 | 回复: 0   主题: [转帖]scala day2        下一篇 
只是很无聊
注册用户
等级:中尉
经验:440
发帖:33
精华:0
注册:2013-6-18
状态:离线
发送短消息息给只是很无聊 加好友    发送短消息息给只是很无聊 发消息
发表于: IP:您无权察看 2013-6-20 13:37:01 | [全部帖] [楼主帖] 楼主

3.数组

3.1固定长度数组Array
a: 定义固定长度数组方法
  方法一:使用new
  例如:

Java代码  
北京联动北方科技有限公司

  1. // An array of ten integers, all initialized with zero  
  2.  val nums = new Array[Int](10)  
  3.  // A string array with ten elements, all initialized with null  
  4.  val a = new Array[String](10)  



  方法二:使用aaply()方法,缩写为Array("111","222")
       对于有初始值的数组 则不能new
  例如:

Java代码  
北京联动北方科技有限公司

  1. val s = Array("Hello", "World")  



b: 固定长度数组的访问使用(),而不是[]
c:固定长度Array数组类型的实现就是对应JAVA 中的Array的实现

3.2 变长数组ArrayBuffer
a:定义使用ArrayBuffer

Java代码  
北京联动北方科技有限公司

  1. import scala.collection.mutable.ArrayBuffer  
  2.   val b = ArrayBuffer[Int]()  
  3.   // ArrayBuffer(1)  
  4.   // Add an element at the end with +=  
  5.     b += 1  
  6.   // ArrayBuffer(1, 1, 2, 3, 5)  
  7.   // Add multiple elements at the end by enclosing them in parentheses  
  8.    b += (1, 2, 3, 5)  
  9.  // ArrayBuffer(1, 1, 2, 3, 5, 8, 13, 21)  
  10.  // You can append any collection with the ++= operator  
  11.   b ++= Array(8, 13, 21)  
  12.    // ArrayBuffer(1, 1, 2)  
  13.    // Removes the last five elements  
  14.     b.trimEnd(5)  



b:在变长的buffer 的数组的末尾添加或者删除元素的花销基本为O(1)
   在数组中间做插入和删除操作,涉及到元素的移位,因此是有花销的
例如:

Java代码  
北京联动北方科技有限公司

  1. // ArrayBuffer(1, 1, 6, 2)  
  2. / Insert before index 2  
  3.  b.insert(2, 6)  
  4.  // ArrayBuffer(1, 1, 7, 8, 9, 6, 2)  
  5.  // You can insert as many elements as you like  
  6.   b.insert(2, 7, 8, 9)  
  7.   // ArrayBuffer(1, 1, 8, 9, 6, 2)  
  8.   b.remove(2)  
  9.   // ArrayBuffer(1, 1, 2)  
  10.   // The second parameter tells how many elements to remove  
  11.    b.remove(2, 3)  



c:和定长数组Array之间通过toArray 以及toBuffer 转化

3.3 遍历
a:通过for循环

 for (i <- 0 until a.length){
      println(i + ": " + a(i))
}


不需要index,直接访问数组元素,

 for(elem<=a) {
      print(elem)
}


3.4 数组转变
  for (...) yield 生成一个新的Array或者ArrayBuffer 类型
例如:

Java代码  
北京联动北方科技有限公司

  1. val a = Array(2, 3, 5, 7, 11)  
  2. // result is Array(4, 6, 10, 14, 22)  
  3.  val result = for (elem <- a) yield 2 * elem  



加上条件:

Java代码  
北京联动北方科技有限公司

  1. for (elem <- a if a % 2 == 0) yield 2 * elem  



3.5 通用算法

 sort  sum max min


3.6 多维数组
  方法一:

Java代码  
北京联动北方科技有限公司

  1. val matrix = Array.ofDim[Double](3, 4) // Three rows, four columns  
  2. //To access an element, use two pairs of parentheses:  
  3. matrix(row)(column) = 42  



  方法二:

Java代码  
北京联动北方科技有限公司

  1.  val triangle = new Array[Array[Int]](10)  
  2. for (i <- 0 until triangle.length)  
  3. triangle(i) = new Array[Int](i + 1)  



3.7 与java 互相操作
  使用 scala.collection.JavaConversion 隐式转化方法 将scala转成java
  例如:

Java代码  
北京联动北方科技有限公司

  1.  import  
  2. scala.collection.JavaConversions.bufferAsJavaList  
  3. import scala.collection.mutable.ArrayBuffer  
  4. // Scala to Java  
  5. val command = ArrayBuffer("ls", "-al", "/home/cay")  
  6. val pb = new ProcessBuilder(command)   



将java 转化成scala

Java代码  
北京联动北方科技有限公司

  1. import scala.collection.JavaConversions.asScalaBuffer  
  2. import scala.collection.mutable.Buffer  
  3. // Java to Scala  
  4. // You can’t use ArrayBuffer—the wrapped object is only guaranteed to be a Buffer  
  5. val cmd : Buffer[String] = pb.command()   



4.Map和Tuples(元组)

4.1 构造Map
a:构造immutable Map

Java代码  
北京联动北方科技有限公司

  1. val scores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)  



b:构造mutable Map

Java代码  
北京联动北方科技有限公司

  1. val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)  



c:初始化一个空Map,则需要使用Map的实现对象

Java代码  
北京联动北方科技有限公司

  1. val scores = new scala.collection.mutable.HashMap[String, Int]  



d:Pair 可以用 ->或者() 形式表示
  例如:

Java代码  
北京联动北方科技有限公司

  1. "Alice" -> 10   
  2.  ("Alice", 10)  



4.2 访问Map中的数据
  a: 直接使用(key)的方式访问
   例如:

Java代码  
北京联动北方科技有限公司

  1. val bobsScore = scores("Bob") // Like scores.get("Bob") in Java  
  2. b]如果scores中 含有“Bob”这个Key,则返回相应的value.否则抛出异常[/b]  


  b:避免异常改进

Java代码  
北京联动北方科技有限公司

  1. val bobsScore = if (scores.contains("Bob")) scores("Bob") else 0  
  2.    上述形式的组合可以用如下的方法   
  3.  val bobsScore = scores.getOrElse("Bob", 0)  



c:map.get(key)  返回的是Option类型。
    Option 类型要么是一些Value,要么就是none

4.4 更新Map的值
a:更新mutable Map

 //为键“Bob”更新新的值
scores("Bob") = 10
//添加一对新的键值对
scores("Fred") = 7
//添加多个键值对
scores += ("Bob" -> 10, "Fred" -> 7)
//删除一对键值
scores -= "Alice"


b:更新immutable Map
  将immutable Map + 新的键值对

Java代码  
北京联动北方科技有限公司

  1. val newScores = scores + ("Bob" -> 10, "Fred" -> 7)    



  得到新的immutable Map,同时也更新了Bob 的值 

  从一个immutable Map中删除一个key为“Alice"的键值对,生成新的immutable Map对象

Java代码  
北京联动北方科技有限公司

  1. scores = scores - "Alice"  



c:Map上迭代

 c1:for ((k, v) <- map) process k and v


c2:或者keySet 或者values,例如:

Java代码  
北京联动北方科技有限公司

  1. scores.keySet // A set such as Set("Bob", "Cindy", "Fred", "Alice")  
  2. or (v <- scores.values) println(v)  



c3:反转Map:

Java代码  
北京联动北方科技有限公司

  1. for ((k, v) <- map) yield (v, k)  



4.5 构造 immutable SortedMaps

Java代码  
北京联动北方科技有限公司

  1. val scores = scala.collection.immutable.SortedMap("Alice" -> 10,  
  2. Fred" -> 7, "Bob" -> 3, "Cindy" -> 8)  



说明:在scala中没有mutable tree map

4.6 与java 交互

 import scala.collection.JavaConversions.mapAsScalaMap


  将java 转成 scala:

Java代码  
北京联动北方科技有限公司

  1. val scores: scala.collection.mutable.Map[String, Int] =new   java.util.TreeMap[String, Int]  
  2. import scala.collection.JavaConversions.propertiesAsScalaMap  
  3. val props: scala.collection.Map[String, String] = System.getProperties()  



将scala object 转成 java

Java代码  
北京联动北方科技有限公司

  1. import scala.collection.JavaConversions.mapAsJavaMap  
  2. import java.awt.font.TextAttribute._ // Import keys for map below  
  3. val attrs = Map(FAMILY -> "Serif", SIZE -> 12) // A Scala map  
  4. val font = new java.awt.Font(attrs) // Expects a Java map  



4.7 Tuple元组
a:Tuple指的是values 聚合,例如:

Java代码  
北京联动北方科技有限公司

  1. (1, 3.14, "Fred") 是一个类型为(Int, Double,   java.lang.String)  
  2.  的Tuple  



b:Tuple的访问
b.1 通过 _1, _2, _3 访问Tuple中的每个组件,
  例如:

Java代码  
北京联动北方科技有限公司

  1. val t = (1, 3.14, "Fred")  
  2.  val second = t._2   



  注意:Tuple的访问是从1开始的
b.2 tuple设置值,例如

Java代码  
北京联动北方科技有限公司

  1. //// Sets first to 1, second to 3.14, third to "Fred"  
  2.  val (first, second, third) = t   
  3. You can use a _ if you don’t need all components:  
  4. val (first, second, _) = t  



b.3元组的使用
对于一个函数返回多个值 时非常使用

4.8 Zipping 压缩
将不同集合中的元素 根据对应位置,组合成一个bundle (Tuple),形成一个大集合,之后对这个新的集合进行操作。
  例如:

Java代码  
北京联动北方科技有限公司

  1. val symbols = Array("<", "-", ">")  
  2. val counts = Array(2, 10, 2)  
  3. val pairs = symbols.zip(counts)  
  4. 输出如下结果:  
  5. Array(("<", 2), ("-", 10), (">", 2))  



使用情况二:转成Map

keys.zip(values).toMap




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论