首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

scala 容器详细解释

操作类型是Elem => U,其中Elem是容器(collection)中元素的类型,U是一个任意的返回值类型。对f的调用仅仅是容器遍历的副作用,实际上所有函数f的计算结果都被foreach抛弃了。...这些操作可以查找容器的第一个元素或者最后一个元素,或者第一个符合某种条件的元素。注意,尽管如此,但也不是所有的容器都明确定义了什么是“第一个”或”最后一个“。...子容器(Subcollection): xs takeRight n 一个容器(collection)由xs的最后n个元素组成(或,若定义的元素是无序,则由任意的n个元素组成)。...它们不添加任何新的操作,但都提供不同的性能特点:线性序列具有高效的 head 和 tail 操作,而索引序列具有高效的apply, length, 和 (如果可变) update操作。...具体不可变集实体类 List 列表List是一种有限的不可变序列式。提供了常数时间的访问列表头元素和列表尾的操作,并且提供了常数时间的构造新链表的操作,该操作将一个新的元素插入到列表的头部。

1.3K10

Scala入门学习笔记四--List使用

前面一章介绍的Array数组是一个所有对象都共享相同类型的可变序列。比方说Array[String]仅包含String。尽管实例化之后你无法改变Array的长度。因此,Array是可变的对象。...Scala的List不同于Java的java.util.List,总是不可变的(Java的List是可变)。更准确的说法,Scala的List是设计给函数式风格的编程用的。...= 1 :: (2:: (3:: (4 :: Nil))) nums: List[Int] = List(1, 2, 3, 4) //由于::操作符的优先级是从右向左的,因此上一条语句等同于下面这条语句...,返回的是列表 scala> nums.init res13: List[Int] = List(1, 2, 3) //取出列表最后一个元素 scala>nums.last res14: Int =...如果你想通过添加元素来构造列表,你的选择是把它们前缀进去,当你完成之后再调用reverse;或使用ListBuffer,一种提供append操作的可变列表,当你完成之后调用toList。

1.1K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    scala 集合详细

    元组 在scala 中元组可以容纳不同类型元素的类,元组是不可变的,用于函数返回多个值....遍历未知长度的tuple可以通过这个迭代器进行遍历. def foo(tuple: Product) = tuple.productIterator.foreach(print) foo: (tuple...mutable.Set 可变集合与不可变的区别是可以将集合元素修改,使用的是 += ++= -= --= 等操作 xs add x 把元素 x 添加到集合 xs 中,如集合 xs 之前没有包含 x...假如N是为集合所要表示的最大整数,则集合的大小就是 N/64 个长整形字,或者 N/8 个字节,再加上少量额外的状态信息字节。 因此当位集合包含的元素值都比较小时,它比其他的集合类型更紧凑。...List 通过List伴生对象的apply方法来创建实例: List("A","B") 过程发生了什么 首先,List伴生对象的apply方法接收的是一个可变参数列表,即数组: override def

    90820

    Scala——多范式, 可伸缩, 类似Java的编程语言

    Scala以一种简洁、高级的语言将面向对象和函数式编程结合在一起.Scala的静态类型有助于避免复杂应用程序中的bug,它的JVM和JavaScript运行时允许构建高性能的系统,可以轻松地访问庞大的库生态系统...高阶函数 一切皆函数, 函数就是方法 函数是第一级的对象.用保证型安全的方式组成它们。...在任何地方使用它们,把它们传给任何事物 ---- 第二章 Scala 安装使用 一 安装语言环境 windows安装(运行scala-2.11.2.msi 自动安装程序), 配置环境变量 官网下载...9 def copyToArray(xs: Array[A], start: Int, len: Int): Unit 列表的副本元件阵列。填充给定的数组xs与此列表中最多len个元素,在位置开始。...高级知识 一 trait 特性 概念理解 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。

    3K20

    【Scala篇】--Scala中集合数组,list,set,map,元祖

    一、前述 Scala在常用的集合的类别有数组,List,Set,Map,元祖。...填充给定的数组xs与此列表中最多len个元素,在位置开始。 10    def distinct: List[A] 建立从列表中没有任何重复的元素的新列表。...last: A 返回最后一个元素 27    def lastIndexOf(elem: A, end: Int): Int 之前或在一个给定的最终指数查找的列表中的一些值最后一次出现的索引 28    ...40    def takeRight(n: Int): List[A] 返回最后n个元素 41    def toArray: Array[A] 列表以一个数组变换 42    def toBuffer...元组定义 与列表一样,与列表不同的是元组可以包含不同类型的元素。元组的值是通过将单个的值包含在圆括号中构成的。 2.

    2.7K10

    带你快速掌握Scala操作———(3)

    > x + y add: (Int, Int) => Int = scala> add(1,2) res3: Int = 3 方法和函数的区别  方法是隶属于类或者对象的,在运行时,它是加载到JVM...的方法区中  可以将函数对象赋值给一个变量,在运行时,它是加载到JVM的堆内存中  函数是一个对象,继承自FunctionN,函数对象有apply,curried,toString,tupled这些方法...,另一种是变长数组 定长数组  定长数组指的是数组的长度是不允许改变的  数组的元素是可以改变的 语法 // 通过指定长度定义数组 val/var 变量名 = new Array[元素类型](数组长度...> for(i <- 0 until a.length) println(a(i)) 1 2 3 4 5 0 until n——生成一系列的数字,包含0,不包含n 0 to n ——包含0,也包含...List具备以下性质:  可以保存重复的值  有先后顺序 在scala中,也有两种列表,一种是不可变列表、另一种是可变列表 定义 不可变列表就是列表的元素、长度都是不可变的。

    2K30

    Scala语法笔记

    :操作符 等同于Scala的 if ( x > 0)  1 else -1 x>0 ?...toString返回的值就无意义了 使用List 使用:: 把一个新元素组合到已有List的最前端,然后返回结果List 使用元组Tuple: 与列表一样,元组也是不可变的,但与列表不同,元组可以包含不同类型的元素...因此依照这个函数文本在运行时创建的函数值严格意义上来讲就不是闭包,因为(x: Int) => x + 1在编写的时候就已经封闭了。...直觉上,Scala的闭包捕获了变量本身,而不是变量指向的值 重复参数 Scala允许你指明函数的最后一个参数可以是重复的。这可以允许客户向函数传入可变长度参数列表。...想要标注一个重复参数,在参数的类型之后放一个星号 函数内部,重复参数的类型是声明参数类型的数组。因此,echo函数里被声明为类型“String*”的args的类型实际上是Array[String]。

    1.2K20

    scala基础学习--scala教程

    (即值变量)和可变变量(不推荐使用) val a = 100 var x = 200 x = 300 下面的语句等价: val y: Int = 10; val y = 10 语句结尾的分号是可选的。...函数中最后一句表达式的结果就是函数的返回值 定义函数 返回值是Int型 def add(firstInput: Int, secondInput: Int): Int = {  val sum = firstInput...= Message("harry", "sam", "fight") 他的所有输入参数自动都是val 不可变的,且是外部类可以直接访问的(类似java的public的) scala还自动给case class...序列sequence:元素有特定的顺序,可以通过下标访问元素 数组Array:元素可修改,数组长度不可变 val arr = Array(10, 20, 30, 40) arr(0) = 50 val...,在这里表示集合xs的元素 扁平化flatMap:输入参数是集合,输出参数是集合的集合,每一个输入参数的集合元素会变成一个集合,但是返回值是一级的集合,即二级集合的扁平化 val line = "Scala

    1.3K90

    分布式机器学习:如何快速从Python栈过渡到Scala栈

    ,通过java运行,Scala则是通过scalac编译,通过scala运行,而且由于二者底层是一致的,因此Scala中可以直接导入java的库来使用,这有助于利用java中很多久经考验的第三方库; 开发工具选择...,主要区别在于当集合长度改变时是否需要重新创建一个新的集合对象; 数组 val arr = new Array[Int](8) // 长度为8,全是0的不可变数组 println(arr) // 直接打印数组看不到其内部元素...,要看到内容需要打印arr.toBuffer; 数组内的元素可以是不同类型的; 通过arr(n)访问元素,下标从0开始; ArrayBuffer是Array的变长版本; 列表 val list_x =...= new ListBuffer[Int] blist += 4 blist.append(5) println(blist) blist2 ++= blist println(blist2) 列表的骚操作就比较多了...,更短一些; Map不可变指的是它的元素个数、元素内容都不能变; 如果用var来定义一个不可变Map,那么看似可变,实际上是创建了一个新的Map对象; 元组 val tuple = (1,1.2,"abc

    1.2K20

    机器学习:如何快速从Python栈过渡到Scala栈

    ,通过java运行,Scala则是通过scalac编译,通过scala运行,而且由于二者底层是一致的,因此Scala中可以直接导入java的库来使用,这有助于利用java中很多久经考验的第三方库; 开发工具选择...,主要区别在于当集合长度改变时是否需要重新创建一个新的集合对象; 数组 val arr = new Array[Int](8) // 长度为8,全是0的不可变数组 println(arr) // 直接打印数组看不到其内部元素...,要看到内容需要打印arr.toBuffer; 数组内的元素可以是不同类型的; 通过arr(n)访问元素,下标从0开始; ArrayBuffer是Array的变长版本; 列表 val list_x =...= new ListBuffer[Int] blist += 4 blist.append(5) println(blist) blist2 ++= blist println(blist2) 列表的骚操作就比较多了...,更短一些; Map不可变指的是它的元素个数、元素内容都不能变; 如果用var来定义一个不可变Map,那么看似可变,实际上是创建了一个新的Map对象; 元组 val tuple = (1,1.2,"abc

    1.8K31

    Python中的lambda表达式

    匿名函数的关键字是 lambda,之后是一系列的参数,然后用冒号隔开,最后则是由这些参数组成的表达式。...*2 square(3) 9 可以看到,匿名函数 lambda 和常规函数一样,返回的都是一个函数对象(function object),它们的用法也极其相似,不过还是有下面几点区别。...,第二个参数是一个可以遍历的集合,它表示对 iterable 的每一个元素,都运用 function 这个函数。...1.3 Python 函数式编程 所谓函数式编程,是指代码中每一块都是不可变的(immutable),都由纯函数(pure function)的形式组成。...还是同样的列表例子,它还可以用 for 循环和 list comprehension(目前没有统一中文叫法,你也可以直译为列表理解等)实现,我们来比较一下它们的速度: python3 -mtimeit

    55960

    Scala语言快速了解一下?

    方法定义由一个 def 关键字开始,紧接着是可选的参数列表,一个冒号 : 和方法的返回类型,一个等于号 = ,最后是方法的主体。...允许你指明函数的最后一个参数可以是重复的,即我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。...ListScala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是。。...,包含除了第一元素之外的其他元素isEmpty 在列表为空时返回true对于Scala列表的任何操作都可以使用这三个基本操作来表达。...def --(xs: GTOA): MapA, B返回一个新的 Map, 移除 xs 对象中对应的 keydef get(key: A): OptionB返回指定 key 的值元组与列表一样,元组也是不可变的

    3K102

    当我们谈论Monad的时候(二)

    如果你还是无法理解这个列表,不妨把这种形式想象成链表:Cons的第一个参数就是当前结点的值,第二个参数就是下一个结点;列表的最后总是连接尾结点Nil。...对于列表,fmap的作用就是遍历每一个列表元素,并对它们应用传入的函数f。...Applicative是对“应用”的抽象,它允许在容器中“存放”一个函数。 还是用例子来说明。上一篇文章的最后,我举了一个多参函数的例子。当时我们封装了一个函数liftM2用来处理2参数的函数。...因此我们可以遍历所有可能的函数-值组合,因此我们只需要两次lmap。比如对于给定的函数列表fx与值列表xs,lmap (`lmap` xs) fx先遍历fx再遍历xs。...由于“按位置遍历”的操作用liftA2很容易就能表达,因此我们可以直接使用liftA2来定义。

    81310

    学好Spark必须要掌握的Scala技术点

    但在Scala中:这些操作符实际上是方法。例如:a + b是a.+(b)方法调用的简写:a 方法 b可以写成 a.方法(b)。...可变Map:scala.collection.mutable.Map==>类似于Java中的HashMap,可以进行put、get、remove等操作,内容可变 ?...,那么就意味着该变量的引用不可变,该引用中的内容是不是可变还取决于这个引用指向的集合的类型 2.3 元组 映射是K/V对偶的集合,对偶是元组的最简单形式,元组可以装着多个不同类型的值,元组是不可变的 ?...集合分可变(mutable)和不可变(immutable)两种类型,immutable类型的集合初始化后长度和内容都不能改变(注意与val修饰的变量进行区别) 2.4.1 Seq/List 在Scala...9 :: List(5, 2) :: 操作符是将给定的头和尾创建一个新的列表【注意::: 操作符是右结合的,如9 :: 5 :: 2 :: Nil相当于 9 :: (5 :: (2 :: Nil))】

    1.6K50

    01.Scala:开发环境搭建、变量、判断、循环、函数、集合

    变长参数 如果方法的参数是不固定的,可以定义一个方法的参数是变长参数。...方法和函数的区别 方法是隶属于类或者对象的,在运行时,它是加载到JVM的方法区中 可以将函数对象赋值给一个变量,在运行时,它是加载到JVM的堆内存中 函数是一个对象,继承自FunctionN,函数对象有...NOTE] 0 until n——生成一系列的数字,包含0,不包含n 0 to n ——包含0,也包含n 11.5 数组常用算法 scala中的数组封装了一些常用的计算操作,将来在对数据处理的时候...List具备以下性质: 可以保存重复的值 有先后顺序 在scala中,也有两种列表,一种是不可变列表、另一种是可变列表 13.1 不可变列表 定义 不可变列表就是列表的元素、长度都是不可变的。...13.2 可变列表 可变列表就是列表的元素、长度都是可变的。

    4.1K20

    Scala Turtuial-容器(集合)类型

    集合 scala的集合分为可变集合和不可变集合,其中可变集合的增删改查都是作用于它本身;而不可变集合的增删改操作返回的是一个新的集合,原不可变集合保持不变。...其中定长数组在定义时被确定,在运行时时数组实例本身不会改变,数组的内容是可以改变的;变长数组在运行时可以根据需要改变内容。...列表 List也是Scala非常重要的集合型的数据结构,同样也是分为可变的List和不可变的List. 可变List:LinkedList,DoubleLinkedList,ListBuffer等。...不可变List:List. 值得注意的是:List的子类::[B]和继承List的对象的Nil,用::表示头尾相接的非空列表,Nil表示的是空列表。...,这里简单的介绍了队列的入队和出队以及栈的出栈和入栈操作。

    1.3K40

    曾经以为Python中的List用法足够灵活,直至我遇到了Scala…

    这里,由于Array数组是数据可变长度不可变的集合,所以对该数组涉及的操作无非就是访问和修改值两类操作;但同时,虽然Array本身长度不可变,但却可以添加新的元素或者与其他Array连接构成新的Array...实际上,多维数组就是数组的多层嵌套,所以自然可以用前述的数组初始化方式嵌套完成多维数组的创建,当数组是一个整齐的维度例如m×n时,那么可直接调用Array.ofDim(m, n)创建即可; 前面提到,Array...是一个长度不可变的数据集合,那么有时为了应用可变长度的数组,此时需要引用ArrayBuffer类来创建,其与Array的最大区别即在于它的长度是可以动态改变。...比如,由于数据不可变,所以其创建过程自然就不能仅指定长度而不提供初值,也就是创建时必须提供所有初值。...---- 最后给出Scala中所有集合类数据结构的继承关系图,区分可变(mutable)和不可变(immutable)两种类型,仅做延伸了解,不具体展开。 ?

    87030

    Scala | 教程 | 学习手册 --- 常用集合

    collections提供一些数据结构来收集给定类型的一个或多个值。 scala的集合还有单独的可变和不可变的集合的类型层次体系。...列表、集和映射 List List类型是一个不可变的单链表 scala> val numbers = List(32, 95, 24, 21, 17) numbers: List[Int] = List...== Nil res2: Boolean = true cons操作符 cons操作符:: 是两个冒号,可以员工cons操作符来绑定元素,构建列表,而不必使用传统额的List()格式 scala> val...它们的反向操作是+:, dropRight和takeRight,这些操作符的参数与其反向操作的参数完全相同,但是需要遍历一遍列表。...主要关注点是fold和foldLeft版本之间的差别。fold,reduce和scan都限于返回与列表元素类型相同的一个值。foldLeft可以实现forall布尔操作,但是fold做不到。

    57820

    Scala最基础入门教程

    def s8 { println("hello") } s8 2、可变参数 可变参数:本质是1个数组 参数位置:如果参数列表中存在多个参数,那么可变参数一般放置在最后,(不能和默认值一起用,和带名参数用时...Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概念)。...建议:在操作集合的时候,不可变用符号,可变用方法。 不可变集合 Set、Map是Java中也有的集合。...LinearSeq是线型的,即有头尾的概念,这种数据结构一般是通过遍历来查找。 可变集合 2、数组 2.1 不可变数组 val arr1 = new Array[Int](10) new是关键字。...获取集合的尾(不是头的就是尾) 集合最后一个数据 集合初始数据(不包含最后一个) 反转 取前(后)n个元素 去掉前(后)n个元素 并集 交集 差集 拉链 滑窗 val list: List[Int]

    68670
    领券