3.数组
3.1固定长度数组Array
a: 定义固定长度数组方法
方法一:使用new
例如:
// An array of ten integers, all initialized with zero
val nums = new Array[Int](10)
// A string array with ten elements, all initialized with null
val a = new Array[String](10)
方法二:使用aaply()方法,缩写为Array("111","222")
对于有初始值的数组 则不能new
例如:
val s = Array("Hello", "World")
b: 固定长度数组的访问使用(),而不是[]
c:固定长度Array数组类型的实现就是对应JAVA 中的Array的实现
3.2 变长数组ArrayBuffer
a:定义使用ArrayBuffer
import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[Int]()
// ArrayBuffer(1)
// Add an element at the end with +=
b += 1
// ArrayBuffer(1, 1, 2, 3, 5)
// Add multiple elements at the end by enclosing them in parentheses
b += (1, 2, 3, 5)
// ArrayBuffer(1, 1, 2, 3, 5, 8, 13, 21)
// You can append any collection with the ++= operator
b ++= Array(8, 13, 21)
// ArrayBuffer(1, 1, 2)
// Removes the last five elements
b.trimEnd(5)
b:在变长的buffer 的数组的末尾添加或者删除元素的花销基本为O(1)
在数组中间做插入和删除操作,涉及到元素的移位,因此是有花销的
例如:
// ArrayBuffer(1, 1, 6, 2)
// Insert before index 2
b.insert(2, 6)
// ArrayBuffer(1, 1, 7, 8, 9, 6, 2)
// You can insert as many elements as you like
b.insert(2, 7, 8, 9)
// ArrayBuffer(1, 1, 8, 9, 6, 2)
b.remove(2)
// ArrayBuffer(1, 1, 2)
// The second parameter tells how many elements to remove
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 类型
例如:
val a = Array(2, 3, 5, 7, 11)
// result is Array(4, 6, 10, 14, 22)
val result = for (elem <- a) yield 2 * elem
加上条件:
for (elem <- a if a % 2 == 0) yield 2 * elem
3.5 通用算法
sort sum max min
3.6 多维数组
方法一:
val matrix = Array.ofDim[Double](3, 4) // Three rows, four columns
//To access an element, use two pairs of parentheses:
matrix(row)(column) = 42
方法二:
val triangle = new Array[Array[Int]](10)
for (i <- 0 until triangle.length)
triangle(i) = new Array[Int](i + 1)
3.7 与java 互相操作
使用 scala.collection.JavaConversion 隐式转化方法 将scala转成java
例如:
import
scala.collection.JavaConversions.bufferAsJavaList
import scala.collection.mutable.ArrayBuffer
// Scala to Java
val command = ArrayBuffer("ls", "-al", "/home/cay")
val pb = new ProcessBuilder(command)
将java 转化成scala
import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.mutable.Buffer
// Java to Scala
// You can’t use ArrayBuffer—the wrapped object is only guaranteed to be a Buffer
val cmd : Buffer[String] = pb.command()
4.Map和Tuples(元组)
4.1 构造Map
a:构造immutable Map
val scores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
b:构造mutable Map
val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
c:初始化一个空Map,则需要使用Map的实现对象
val scores = new scala.collection.mutable.HashMap[String, Int]
d:Pair 可以用 ->或者() 形式表示
例如:
"Alice" -> 10
("Alice", 10)
4.2 访问Map中的数据
a: 直接使用(key)的方式访问
例如:
val bobsScore = scores("Bob") // Like scores.get("Bob") in Java
[b]如果scores中 含有“Bob”这个Key,则返回相应的value.否则抛出异常[/b]
b:避免异常改进
val bobsScore = if (scores.contains("Bob")) scores("Bob") else 0
上述形式的组合可以用如下的方法
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 + 新的键值对
val newScores = scores + ("Bob" -> 10, "Fred" -> 7)
得到新的immutable Map,同时也更新了Bob 的值
从一个immutable Map中删除一个key为“Alice"的键值对,生成新的immutable Map对象
scores = scores - "Alice"
c:Map上迭代
c1:for ((k, v) <- map) process k and v
c2:或者keySet 或者values,例如:
scores.keySet // A set such as Set("Bob", "Cindy", "Fred", "Alice")
for (v <- scores.values) println(v)
c3:反转Map:
for ((k, v) <- map) yield (v, k)
4.5 构造 immutable SortedMaps
val scores = scala.collection.immutable.SortedMap("Alice" -> 10,
"Fred" -> 7, "Bob" -> 3, "Cindy" -> 8)
说明:在scala中没有mutable tree map
4.6 与java 交互
import scala.collection.JavaConversions.mapAsScalaMap
将java 转成 scala:
val scores: scala.collection.mutable.Map[String, Int] =new java.util.TreeMap[String, Int]
import scala.collection.JavaConversions.propertiesAsScalaMap
val props: scala.collection.Map[String, String] = System.getProperties()
将scala object 转成 java
import scala.collection.JavaConversions.mapAsJavaMap
import java.awt.font.TextAttribute._ // Import keys for map below
val attrs = Map(FAMILY -> "Serif", SIZE -> 12) // A Scala map
val font = new java.awt.Font(attrs) // Expects a Java map
4.7 Tuple元组
a:Tuple指的是values 聚合,例如:
(1, 3.14, "Fred") 是一个类型为(Int, Double, java.lang.String)
的Tuple
b:Tuple的访问
b.1 通过 _1, _2, _3 访问Tuple中的每个组件,
例如:
val t = (1, 3.14, "Fred")
val second = t._2
注意:Tuple的访问是从1开始的
b.2 tuple设置值,例如
//// Sets first to 1, second to 3.14, third to "Fred"
val (first, second, third) = t
You can use a _ if you don’t need all components:
val (first, second, _) = t
b.3元组的使用
对于一个函数返回多个值 时非常使用
4.8 Zipping 压缩
将不同集合中的元素 根据对应位置,组合成一个bundle (Tuple),形成一个大集合,之后对这个新的集合进行操作。
例如:
val symbols = Array("<", "-", ">")
val counts = Array(2, 10, 2)
val pairs = symbols.zip(counts)
输出如下结果:
Array(("<", 2), ("-", 10), (">", 2))
使用情况二:转成Map
keys.zip(values).toMap
分享到:
相关推荐
scala学习笔记,适合初学scala的人使用,通俗易懂,小案例适合练手
day. You won’t understand the zen of objects being functions and functions being objects in your first week. Each feature of the language is another light bulb waiting to switch on over your head. I...
Solve day-to-day programming problems using functional programming idioms Cut down the boiler-plate and express patterns simply and elegantly using Scala's concise syntax Tame system complexity by ...
utils4s包含各种scala通用、好玩的工具库demo和使用文档,通过简单的代码演示和操作文档,各种库信手拈来。时间操作的示例代码:package cn.thinkjoy.utils4s.lamma import io.lamma._ /** * test * */ ...
一天之内的Scala ...然后你需要克隆 repo git clone https://github.com/gilt/scala-1-day.git 。 之后你应该可以去 000.setup 并运行sbt "run-main javax.HelloWorld"和sbt "run-main scalax.HelloWorld" 。
华沙Scala光滑的一天 华沙 Scala 用户组聚会的项目框架。 通过更改application.conf文件中的设置,可以将应用程序配置为与数据库和服务的模拟实现一起运行。 建议在 sbt 中使用re-start命令运行应用程序并使用re-...
#Dallas Cassandra Day KafkaSparkCasandraDemo 为了运行此演示,假定您已安装以下组件,并且在本地系统上可用。 Datastax企业版4.8 Apache Kafka 0.8.2.2,我使用了Scala 2.10构建吉特sbt ## Kafka入门请使用以下...
Scala Perl CC#Excel MS Access JSON图形映射NLP自然语言处理机器学习igraph DOSUBL DOW循环stackoverflow SAS社区。 90天滚动标准偏差的标准偏差 WPS/Proc R 10 million readings is a tiny amount of data. Are ...
Python - 100天从新手到大师 ...数据分析挖掘 - Python / R / Scala / Matlab 机器学习 - Python / R / Java / Lisp 作为一名Python开发者,主要的就业领域包括: Python服务器后台开发 / 游戏服务器开
Software engineers and architects will learn patterns that address day-to-day distributed development problems in a fault-tolerant and scalable way. Project leaders and CTOs will gain a deeper ...
You will learn to use Spark as a big data operating system, understand how to implement advanced analytics on the new APIs, and explore how easy it is to use Spark in day-to-day tasks. Style and ...
Scala / Matlab 机器学习 - Python / R / Java / Lisp 作为一名Python开发者,主要的就业领域包括: Python服务器后台开发 / 游戏服务器开发 / 数据接口开发工程师 Python自动化运维工程师 Python数据分析 / 数据...
movie_ratings NewDay的数据工程师招聘流程
Scala / Matlab 机器学习 - Python / R / Java / Lisp 作为一名Python开发者,主要的就业领域包括: Python服务器后台开发 / 游戏服务器开发 / 数据接口开发工程师 Python自动化运维工程师 Python数据分析 / 数据...
Day Benelux 会议使用复杂的反馈和选择系统),以避免令人不快的“放开我的伙伴”效应。 这并不妨碍我们能够邀请一两个著名的演讲者,我们知道他们总是有有趣的事情要讲,并且谁将成为出色的头条新闻...... 底端 ...
Scala / Matlab 机器学习 - Python / R / Java / Lisp 作为一名Python开发者,主要的就业领域包括: Python服务器后台开发 / 游戏服务器开发 / 数据接口开发工程师 Python自动化运维工程师 Python数据分析 / 数据...
Kotlin、Kafka、Scala、Java、大数据工程、DDD 和吉他/音乐/音频的内容。 :nerd_face: 注意:当然,这是我主要在下班时阅读的内容。 :see-no-evil_monkey: 我目前的技术栈@工作是 Kotlin、Java、Kafka、Spring、...
Scala / Matlab 机器学习 - Python / R / Java / Lisp 作为一名Python开发者,主要的就业领域包括: Python服务器后台开发 / 游戏服务器开发 / 数据接口开发工程师 Python自动化运维工程师 Python数据分析 / 数据...
Scala Perl CC#Excel MS Access JSON图形映射NLP自然语言处理机器学习igraph DOSUBL DOW循环stackoverflow SAS社区。 数月复利 Original topc: proc expand convert from day to month WPS datastep and WPS IML ...
You are planning a big programming conference and have receivedmany proposals which have passed the initial screen process but you're havingtrouble fitting them into the time constraints of the day --...