scala 入门(2)--数组相关操作
scala 无论从数组的定义还是操作方面来说都跟java非常相似,但又有其独特的强大之处…
1、 定长数组
对于长度不变的数组,可以用scala中的Array。
//scala 里使用new实例化对象。 实例化过程中,可以用值和类型使对象参数化(创建对象的同时完成对它的设置)
val nums = new Array[Int](5); //含5个整数的数组,元素默认初始化为0;
val arr = new Array[String](10); //含10个字符串的数组,元素默认初始化为null;
arr(0) = “hello”; //数据赋值
val s = Array("hello", "world"); //长度为2的String数组。类型:自动推断。
注: jvm 中 scala的Array 是以 java数组的方式实现。 示例中的s 在jvm中的类型为 java.lang.String[];
2、变长数组
对于长度可变的数组,可以用scala中的ArrayBuffer。相应java中有ArrayList。
val nums = ArrayBuffer[Int]();
或
val nums = new ArrayBuffer[Int] //一个空数组,准备存放整数。
nums += 1; //ArrayBuffer(1); 用+=在尾端添加元素。
nums +=(2,3,4,5) // ArrayBuffer(1,2,3,4,5); 在尾端添加多个元素。
nums ++=Array(6,7,8) //ArrayBuffer(1,2,3,4,5,6,7,8) ++= 可以用来追加任何集合
nums.trimEnd(5) //ArrayBuffer(1,2,3) 移除最后五个元素。
nums.insert(2, 4) //ArrayBuffer(1,2,4,3) 在下标2 前加一个元素 4;
nums.insert(2, 5, 6) //ArrayBuffer(1,2,5,6,4,3) 在下标2前插入多个元素
nums.remove(3) //ArrayBuffer(1,2,5,4,3) 移除第三个元素 (下标从0 始)
nums remove(2, 2)//ArrayBuffer(1,2, 3) 移除从第二个元素始的2个元素;
可变长数组转换为定长数据只用掉用其toArray方法。如 nums.toArray;
反过来,调用 a.toBuffer;
3、遍历数组和数组缓冲
scala数组(数组缓冲)的遍历,可以用for循环进行。如:
for(i <- 0 until a.length)
println(a(i));
//变量i 取 0 到 a.length; until 是 RichInt类的方法, 返回小于上限的方法。
4、数组转换
前边讲述了如何像Java那样操作数组。不过在scala中,数组还有更强大的功能。如过滤,转换等。例:
val a = Array(1,2,3,5,7);
val result = for(elem <- a) yield 2 * elem;
//result = Array(2,4,6,10,14); 此处转变并不会改变原数组的值,而是产生一个全新的数组。即for() yield 创建一个类型与原始集合相同的新集合。 数集合中的元素包含yield 之后的表达式的值,每个循环对应一个。
另外对集合处理时,你若只想处理满足条件的特定元素,这个需求可以通过守卫:for中的if 来实现。 若对a中奇数翻倍,则
for(elem <- a if elem % 2 == 1) yield 2 * elem;
5、常用算法
Array(1,2,4,6).sum //计算数组的值
Array(1,4,2,6).sorted(_ < _); //排序 不改变原数组的值。
另外还有 append , appendAll, count, copyToArray, max等方法
scala 入门(2)--数组相关操作的更多相关文章
- Scala学习(三)----数组相关操作
数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...
- Scala学习三——数组相关操作
一.若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer 固定长度数组: 如val nums=new Array[Int](10) //10个整型数组,所有元素初始化为0; val ...
- 快学Scala习题解答—第三章 数组相关操作
3 数组相关操作 3.1 编写一段代码.将a设置为一个n个随机整数的数组,要求随机数介于0(包括)和n(不包括)之间 random和yield的使用 import scala.math.rando ...
- scala 对一个数组分组操作
通常我们有一些需求,对一个数组两两进行翻转,通常就涉及到奇数偶数,否则就会出现数组index异常了,所以我们该怎么办呢? 虽然是一个入门级问题,但是我还是觉得这是一个很有意思的题目,因此写了一个对于通 ...
- 《快学Scala》第三章 数组相关操作
- 快学Scala-第三章 数组相关操作
知识点: 1.定长数组 Array val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new Array[String](10) / ...
- 【php】php数组相关操作函数片段
下面这些都是我在工作中用到的函数,现在整理下. 判断是否是一个数组 function _is_array($value){ if (is_array($value)) { return true; } ...
- Ch03 数组相关操作 - 练习
1. 编写一段代码,将a设置为一个n个随机数的数组,要求随机数介于0(包含)和n(不包含)之间. //import java.lang.Math def getArray(n:Int)={ val ...
- linux awk数组相关操作介绍
用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算又会怎么样呢.我们先看下以下的一些介绍,结合样例我们会解说下它的不同之处.在 awk 中数组叫做关联数组(assoc ...
随机推荐
- android中使用PopupWindow实现弹出窗口菜单
结合上篇android中使用ViewPager实现图片拖动,我们实现了点击“帮助”按钮的功能,这一篇则是接着上一篇,让我们一起来完成“我的”按钮的功能,这一功能,则是使用PopupWindow来实现弹 ...
- yiic模块module使用
模块是一个独立的软件单元,它包含 模型, 视图, 控制器 和其他支持的组件. 在许多方面上,模块看起来像一个 应用.主要的区别就是模块不能单独部署,它必须存在于一个应用里. 用户可以像他们访问普通应用 ...
- ubuntu下编译时遇到的错误及解决方式
1.错误展示: hangma@ubuntu:~/test/test/protest/stack_test$ gcc -c my_stack.c -o my_stack.o In file inclu ...
- ViewPager的使用方法和实现过程
布局文件里添加viewPager布局 <android.support.v4.view.ViewPager android:id="@+id/search_viewpager" ...
- 好吧,使用sql实现Dijkstra算法
我本来不想做这么蛋疼的事情的,可是更蛋疼的是我看了王大神的博客然后中毒了!我发誓再!不!看!了!不过问题本身还是有一点意思的,正好学过图论没有实现过dijkstra,刚好在慕课上又学了一点pl/sql ...
- apue
#ifndef apue_h #define apue_h #define _POSIX_C_SOURCE 200809L #if defined(SOLARIS) /* Solaris 10 */ ...
- Delphi TStringList的用法
Delphi TStringList的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. TStringList 常用方法与属性: var List: TStringL ...
- AndroidUI开源组件库BottomView 第三方自定义UI控件
这里分享一个Android的非常经典实用而且简单方便的第三方UI控件库:BottomView(小米的米UI也用到了这个) 原文 http://blog.csdn.net/opzoonzhuzheng ...
- C++ primer 中文第三版 阅读笔记 第八章
一.寄存器对象: 函数中频繁被使用的变量可以加上register就可声明为寄存器对象.对于寄存器对象,假如能够放到寄存器中就会放到寄存器中,放不到的话就放到内存中.比如 register int a ...
- Hibernate简单的基础理论
和Hibernate有关的概念,是掌握Hibernate必须了解的知识.就个人经验来说,可以在了解如何简单开发Hibernate之后,再来学习这些概念,这样可以有个比较清楚的认识.Hibernate是 ...