5、Scala数据结构Set

本文介绍Scala中的Set数据结构。

1、基本知识

Scala中Set存储的元素类型都是相同的、并且元素是唯一的。

Scala中List可以存储重复的元素,但是Set中的元素都是唯一的、不重复的。

Set有可变的、不可变的两种类型。 默认的是不可变的。

如果要使用可变的Set,需要导入包名

//in scala
import scala.collection.mutable.Set

2、Set的定义/声明方法

2.1 定义不可变的Set

//1、定义不可变的Set
val country = Set("Russia", "Denmark", "Sweden")
println(country)

//2、定义不可变的空的Set
var age = Set() 
println(age)

2.2 定义可变的Set

//1、定义一个可变的Set
var id1 = scala.collection.mutable.Set[Int](4,5,6,7,8,9)
println(id1)

//2、定义一个可变的空的Set
var id0 = scala.collection.mutable.Set[Int]() 
println(id0)

3、Set上的基本操作

Set.head 返回set中第一个元素,这是一个元素

Set.tail 返回set中除了第一个元素外的其他所有元素,这还是一个set

Set.isEmpty 判断集合set是不是空的

Set.min方法查找集合中的最小元素

Set.max 方法查找集合中的最大元素

//in scala
object Test {
  def main(args: Array[String]) {
    val num1 = Set(125,45,678,34,20,322,10)
    val num2 = Set(125,45,678,34,20,322,10,123)

    //集合是否为空判断
    println(num1.isEmpty)

    //集合长度大小
    println(num1.size)

    //集合元素查找
    println(num1.head) //是10, 并不是125。这里的顺序到底是怎样的?
    println(num1.last) //这里显示的最后一个元素 和声明时的并不一样。为什么 是322 不是10?
    println(num1.tail)
    println(num1.min)
    println(num1.max)

    //集合元素运算
    println(num1.product)
    println(num1.sum)

    //Set数据类型转成其他数据类型
    println(num1.toList)
    println(num1.toSeq) //ArrayBuffer
    println(num1.toArray)
    println(num1.mkString) //将set中的数据用一个string展示。这里string的顺序也不是声明的元素的顺序,为什么?

    //子集合判断
    println(num1.subsets())
    println(num1.subsetOf(num2))  //判断集合num1是不是集合num2的一个子集

    //元素包含判断
    println(num1.contains(35)) //判断集合中是否包含某个元素
    println(num1.contains(45)) //判断集合中是否包含某个元素
  }
}

4、拼接两个Set

操作符++ 或者 Set.++() 方法可以用来拼接两个Set。两者功能完全相同。

因为Set集合中的元素都是唯一的,所以拼接后的结果set会移除掉拼接前的重复项。

object Test {
  def main(args: Array[String]) {
    val furniture_1 = Set("Sofa", "Table", "chair","Toby")
    val furniture_2 = Set("Bed", "Door","Toby")

    var furniture = furniture_1 ++ furniture_2 //使用操作符 ++ 
    println( "furniture_1 ++ furniture_2 : " + furniture )

    var furn = furniture_1.++(furniture_2)  //使用方法 .++
    println( "furniture_1.++(furniture_2) : " + furn )
  }
}

5、查看两个Set中的公共元素集

操作符Set.&() 或者 Set.intersect() 方法可以用来查找两个Set中的公共元素

object Test {
  def main(args: Array[String]) {
    val n1 = Set(11,45,67,78,89,86,90)
    val n2 = Set(10,20,45,67,34,78,98,89)

    println( "n1.&(n2) : " + n1.&(n2) ) //使用操作符&取两个set的公共元素
    println( "n1.intersect(n2) : " + n1.intersect(n2) ) //使用方法名intersect取两个set的公共元素
  }
}

 

6、查看集合中是否包含某个元素

Set.contains()方法用来查看集合中是否包含某个元素

//in scala
val num1 = Set(125,45,678,34,20,322,10)
println(num1.contains(35)) //判断集合中是否包含某个元素
println(num1.contains(45)) //判断集合中是否包含某个元素

7、判断一个集合是不是另一个集合的子集

Set.subsetOf() 方法用来判断一个集合是不是另一个集合的子集合

//in scala
val num1 = Set(125,45,678,34,20,322,10)
val num2 = Set(125,45,678,34,20,322,10,123)
println(num1.subsetOf(num2))  //判断集合num1是不是集合num2的一个子集

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于Scala语言清洗数据,可以使用Scala集合函数和操作符来清洗数据。例如,map()函数可以用来更改数据结构,而filter()函数可以用来筛选符合某些条件的数据,还可以使用flatMap()函数将多个集合合并成一个集合,以便更好地操作数据。 ### 回答2: Scala是一种支持函数式编程和面向对象编程的编程语言,广泛应用于大数据领域的数据处理和分析工作中。在数据清洗方面,Scala提供了丰富的库和功能,能够帮助开发人员高效地处理和转换数据。 首先,Scala提供了灵活且强大的集合操作功能。开发人员可以使用Scala内置的集合类,如List、Array、Set和Map等,来对输入的数据进行处理和操作。通过逐步遍历数据并应用一系列操作,如映射、过滤、排序和聚合等,开发人员可以清洗数据,去除重复项、空值以及其他不符合要求的数据。 其次,Scala提供了高阶函数的支持,使得开发人员能够将数据处理的逻辑抽象成函数,并在不同的数据上进行复用。例如,开发人员可以定义一个用于清洗数据的函数,然后将其应用到不同的数据集上,提高代码的复用性和可维护性。 此外,Scala还支持模式匹配,这在数据清洗中也非常有用。开发人员可以使用模式匹配来匹配和筛选特定的数据模式,并进行相应的处理。例如,可以匹配日期格式、邮箱地址格式或其他特定的数据模式,并对其进行有效的清洗操作。 最后,Scala还可以与其他大数据处理框架和工具,如Apache Spark等进行集成。这些框架提供了更高级的数据处理功能和分布式计算能力,使得开发人员可以处理更大规模和复杂的数据集。 综上所述,Scala语言在数据清洗方面具有强大的功能和灵活性。它提供了丰富的集合操作、高阶函数、模式匹配和与其他大数据处理框架的集成能力,使得开发人员能够高效地清洗和转换数据。 ### 回答3: Scala是一种现代的通用编程语言,它可以被用于数据清洗的各个方面。Scala提供了一些强大的功能,使得对数据进行清洗变得更加简单和高效。 首先,Scala提供了强大的函数式编程特性。函数式编程是一种编程范式,可以将程序分解为相互独立的函数,并通过组合这些函数来构建复杂的处理过程。这种方式非常适合数据清洗,因为我们可以将数据处理过程分解为一系列的转换操作,每个操作执行一个特定的清洗功能。Scala的函数式编程特性使得这种分解和组合过程变得非常简单和优雅。 其次,Scala拥有广泛的第三方库生态系统。Scala社区开发了许多针对数据处理的开源库,包括处理CSV、JSON、XML等常见数据格式的库,以及进行文本处理、日期时间处理、正则表达式匹配等功能的库。这些库可以极大地简化数据清洗的过程,提供了丰富的工具和函数来处理各种数据操作。 此外,Scala是一种基于JVM的语言,可以无缝地与Java和其它JVM语言进行集成。这意味着我们可以直接使用Java的各种工具和库,以及调用Java的API来处理数据。例如,我们可以使用Java的IO库读取和写入文件,使用Java的数据库连接库连接和查询数据库,甚至可以使用Java的机器学习库进行高级的数据处理和分析。 最后,Scala还提供了分布式计算的能力。通过使用Scala的分布式计算框架,我们可以利用集群中的多台计算机来并行处理数据。这对于大规模数据集的清洗和处理尤为重要,可以大大提高数据处理的效率和性能。 总而言之,Scala是一种非常合适用于数据清洗的语言。它提供了强大的函数式编程特性,丰富的第三方库支持,可以与Java和其它JVM语言无缝集成,并且具备分布式计算的能力。这些功能使得Scala成为一个强大而灵活的工具,用于解决各种数据清洗问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值