Scala List(列表)

Scala List(列表)

Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是。。

列表的元素类型 T 可以写成 List[T]。例如,以下列出了多种类型的列表:

实例

// 字符串列表
val site: List[String] = List("Tencent", "Google", "Baidu")
​
// 整型列表
val nums: List[Int] = List(1, 2, 3, 4)
​
// 空列表
val empty: List[Nothing] = List()
​
// 二维列表
val dim: List[List[Int]] =
   List(
      List(1, 0, 0),
      List(0, 1, 0),
      List(0, 0, 1)
   )

构造列表的两个基本单位是 Nil::

Nil 也可以表示为一个空列表。

以上实例我们可以写成如下所示:

实例

// 字符串列表
val site = "Runoob" :: ("Google" :: ("Baidu" :: Nil))
​
// 整型列表
val nums = 1 :: (2 :: (3 :: (4 :: Nil)))
​
// 空列表
val empty = Nil
​
// 二维列表
val dim = (1 :: (0 :: (0 :: Nil))) ::
          (0 :: (1 :: (0 :: Nil))) ::
          (0 :: (0 :: (1 :: Nil))) :: Nil


列表基本操作

Scala列表有三个基本操作:

  • head 返回列表第一个元素

  • tail 返回一个列表,包含除了第一元素之外的其他元素

  • isEmpty 在列表为空时返回true

对于Scala列表的任何操作都可以使用这三个基本操作来表达。实例如下:

实例

// 字符串列表
object Test {
   def main(args: Array[String]) {
      val site = "Tencent" :: ("Google" :: ("Baidu" :: Nil))
      val nums = Nil
​
      println( "第一网站是 : " + site.head )
      println( "最后一个网站是 : " + site.tail )
      println( "查看列表 site 是否为空 : " + site.isEmpty )
      println( "查看 nums 是否为空 : " + nums.isEmpty )
   }
}

执行以上代码,输出结果为:

$ vim Test.scala 
$ scala Test.scala 
第一网站是 : Tencent
最后一个网站是 : List(Google, Baidu)
查看列表 site 是否为空 : false
查看 nums 是否为空 : true

连接列表

你可以使用 ::: 运算符或 List.:::() 方法或 List.concat() 方法来连接两个或多个列表。实例如下:

实例

object Test {
   def main(args: Array[String]) {
      val site1 = "Tencent" :: ("Google" :: ("Baidu" :: Nil))
      val site2 = "Facebook" :: ("Taobao" :: Nil)
​
      // 使用 ::: 运算符
      var fruit = site1 ::: site2
      println( "site1 ::: site2 : " + fruit )
     
      // 使用 List.:::() 方法
      fruit = site1.:::(site2)
      println( "site1.:::(site2) : " + fruit )
​
      // 使用 concat 方法
      fruit = List.concat(site1, site2)
      println( "List.concat(site1, site2) : " + fruit  )
     
​
   }
}

执行以上代码,输出结果为:

$ vim Test.scala 
$ scala Test.scala 
site1 ::: site2 : List(Tencent, Google, Baidu, Facebook, Taobao)
site1.:::(site2) : List(Facebook, Taobao, Runoob, Google, Baidu)
List.concat(site1, site2) : List(Tencent, Google, Baidu, Facebook, Taobao)

List.fill()

我们可以使用 List.fill() 方法来创建一个指定重复数量的元素列表:

实例

object Test {
   def main(args: Array[String]) {
      val site = List.fill(3)("Tencent") // 重复 Tencent 3次
      println( "site : " + site  )
​
      val num = List.fill(10)(2)         // 重复元素 2, 10 次
      println( "num : " + num  )
   }
}

执行以上代码,输出结果为:

$ vim Test.scala 
$ scala Test.scala 
site : List(Tencent, Tencent, Tencent)
num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)

List.tabulate()

List.tabulate() 方法是通过给定的函数来创建列表。

方法的第一个参数为元素的数量,可以是二维的,第二个参数为指定的函数,我们通过指定的函数计算结果并返回值插入到列表中,起始值为 0,实例如下:

实例

object Test {
   def main(args: Array[String]) {
      // 通过给定的函数创建 6 个元素
      val squares = List.tabulate(6)(n => n * n)
      println( "一维 : " + squares  )
​
      // 创建二维列表
      val mul = List.tabulate( 4,5 )( _ * _ )      
      println( "多维 : " + mul  )
   }
}

执行以上代码,输出结果为:

$ vim Test.scala 
$ scala Test.scala 
一维 : List(0, 1, 4, 9, 16, 25)
多维 : List(List(0, 0, 0, 0, 0), List(0, 1, 2, 3, 4), List(0, 2, 4, 6, 8), List(0, 3, 6, 9, 12))

List.reverse

List.reverse 用于将列表的顺序反转,实例如下:

实例

object Test {
   def main(args: Array[String]) {
      val site = "Tencent" :: ("Google" :: ("Baidu" :: Nil))
      println( "site 反转前 : " + site )
​
      println( "site 反转后 : " + site.reverse )
   }
}

执行以上代码,输出结果为:

$ vim Test.scala 
$ scala Test.scala 
site 反转前 : List(Tencent, Google, Baidu)
site 反转后 : List(Baidu, Google, Tencent)

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT老王Hua_TZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值