scala 数组转换

for(...)yield循环创建了一个类型与原始集合相同的新集合。

 val a1 = Array(2, 3, 5, 7, 11)

    val result = for (elem <- a1) yield 2 * elem

    for (elem <- result) {

      println(elem)

    }

结果

4

6

10

14

22

通过守卫:for中的if 来实现处理那些满足特定条件的元素。

val a1 = Array(2, 3, 5, 7, 11)

    val result = for (elem <- a1 if elem % 2 == 0) yield 2 * elem

    for (elem <- result) {

      println(elem)

    }

结果:

4

另一种方法是用filter

val a1 = Array(2, 3, 5, 7, 11)
 val result = a1.filter(_ % 2 == 0).map(2 * _)
    for (elem <- result) {
      println(elem)
    }

结果

4

另一种形式

val a1 = Array(2, 3, 5, 7, 11)
val result = a1.filter(_ % 2 == 0) map { 2 * _ }
    for (elem <- result) {
      println(elem)
    }

结果

4

给定一个整数的数组,想移除除第一个负数之外的所有负数。

import scala.collection.mutable.ArrayBuffer
val a1 = ArrayBuffer(2, 3, 5, 7, 11)
 var first = true
    var n = a1.length
    var i = 0
    while (i < n) {
      if (a1(i) >= 0) i += 1
      else {
        if (first) { first = false; i += 1 }
        else { a1.remove(i); n -= 1 }
      }
    }

这个方案其实并不那么好:从数组中移除元素并不高效,把非负数值拷贝到前端好得多。

首先收集需要保留的下标

val a1 = ArrayBuffer(1, -2, 3, -4,5, 6, -7, 8, -9, 10)
var first = true
    val indexes = for (i <- 0 until a1.length if first || a1(i) >= 0) yield {
      if (a1(i) < 0) first = false; i
    }
    for(elem <- indexes ){
      print(elem+",")
    }
    println()

结果

0,1,2,4,5,7,9,

然后将元素移动到该去的位置,并截断尾端

for (j <- 0 until indexes.length) {
      a1(j) = a1(indexes(j))
    }
    println("截断前:")
    for (elem <- a1) {
      print(elem+",")
    }
    println()

结果

截断前:

1,-2,3,5,6,8,10,8,-9,10,

截断

println("截断后")

    a1.trimEnd(a1.length - indexes.length)

    for (elem <- a1) {

      print(elem + ",")

    }

结果

1,-2,3,5,6,8,10,

scala 数组转换,布布扣,bubuko.com

时间: 2024-10-17 10:08:41

scala 数组转换的相关文章

快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = "cc" 变长数组定义: val ab = new ArrayBuffer[String]() val ab1 = ArrayBuffer[String]() 定长数组增加元素: ab += "aa" ab += ("bb", "cc&q

scala数组

#scala数组 val A= new Array[T](N) val A = new Array[Int](10) ##变长数组 import scala.collection.mutable.ArrayBuffer val C = new ArrayBuffer[T]() C += e1 C += (e2,e3) C++ = Array(e2,e3) trimEnd(2)  #移除最后2个 C.insert(2,e3) C.remove(3,2) #转换 D=C.toArray    #变长

Scala数组操作

数组要点 若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer:提供初始值时不要使用new:用()来访问元素:用for(elem<-arr)来遍历元素:用for(elem<-arr if...)...yield...来将原数组转型为新数组:Scala数组和Java数组可以互操作,用ArrayBuffer,使用scala.collection.JavaConversions中的转换函数. 例子: import scala.collection.mutable.ArrayBuf

【scala】scala 数组 (三)

基础内容 1. 数组定义 定长.可变数组的定义;元素添加,删除,排序,求和等常用运算 import scala.collection.mutable.ArrayBuffer import scala.math.BigDecimal.RoundingMode /** * @author xwolf * @date 2017-04-09 18:23 * @since 1.8 */ object Collection { def main(arg:Array[String]): Unit ={ mul

Scala 数组和List

Scala 数组和List: import scala.collection.mutable.ArrayBuffer import scala.collection.mutable.Buffer object ArrayLearning { def main (args: Array[String]): Unit = { // useZipUnzip // listOps // arrayOps // ArrayBufferOps } private def useZipUnzip = { //

LeetCode OJ:Convert Sorted Array to Binary Search Tree(将排序好的数组转换成二叉搜索树)

Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 讲一个排序好的数组转换成二叉搜索树,这题没想出来,基本上是参考别人的,边界条件应该注意一下: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * T

android中的byte数组转换

/** * 将一个单字节的byte转换成32位的int * * @param b * byte * @return convert result */ public static int unsignedByteToInt(byte b) { return (int) b & 0xFF; } /** * 将一个单字节的Byte转换成十六进制的数 * * @param b * byte * @return convert result */ public static String byteToH

数组转换成集合

package com.loaderman.jdk5; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Demo4_AsList { /** * 数组转换成集合 * 数组转换成集合虽然不能增加或减少元素,但是可以用集合的思想操作数组,也就是说可以使用其他集合中的方法 */ public static void main(String[] args) { //demo1

Scala 数组-Array

环境: CentOS 6.3 1. 定义且同时初始化数组 $ cat array.scala val numNames2 = Array.apply("France","US","china") println(numNames2(0)) [[email protected] scala]$ scala array.scala France Array.apply("France","US","c