Scala的映射和元组操作

映射和元组操作

  • 构造Map
    // 构造一个不可变的MAP映射,类似与key -> value这样的组合叫做对偶
    val score = Map("Jack" -> 12, "Bob" -> 20)
    // 也可以这种创建一个Map映射
    val score1 = Map(("Jack", 12), ("Bob", 20))
    // 根据key获取value,类似java中的map.get(key)若是获取一个不存在的key则会报错而不是null
    println(score("Jack"))
    // 获取元素不存在给出无元素提醒
    val flag = if (score.contains("haha")) score.get("haha") else "no such element"
    val flag1 = score.getOrElse("haha", "no such element")
    // 创建可变Map
    val score = scala.collection.mutable.Map("Jack" -> 12, "Bob" -> 20)
  • 更新映射中的值
在可变的映射中,可以更新某个映射的值,在=号左侧使用():
// 更新可变的Map的值
scores("Bob") = 10
// 添加新的key-value
scores("haha")=7
// 也可以使用+=操作和创建映射关系
scores +=("Michael" -> 22)
// 移除某个键对应的值
score -=("Michael")
  • 迭代映射
for((k,v) <- 映射) 这种可以得到每一个的键值对
// 和java一样可以使用keySet和values方法,values方法将会返回一个iterable
score.keySet // 返回类似("Bob","Michael")
// 获取map的value
for (v <- score.values) println(v)
  • 排序映射

操作映射时,需要选定一个实现—哈希表或者平衡树,默认情况Scala中式hash表,若想顺序访问所有的键,因此需要一个树形映射

val scores = scala.collection.immutable.SortedMap("Bob" -> 10,"michael" -> 12)
  • 元组

映射式键值对的集合,对偶式元组(tuple)的最简单的形态—而元组式不同类型值得聚集

(1,95.27,"Bob") 是一个元组类型为(Int,Double,java.lang.String)可以方法_1,_2,_3访问元组例如以下元组:
    val l = (1,2.34,"哈哈")
    println(l._2) // 将会返回1

元组常用的一个场景就是使用Redis数据类型Hash的key命令hgetall,这个命令返回key所在域和值.也就是一个元祖对象。在电商系统通常会对用户当天的未支付订单上限做统计:就会触发redis的支付统计,而这个统计要求只在当天有效,第二天将清除昨日用户未支付。所以我们通常这么做:

// 用户购买一次触发一次redis数据统计
val count= jedisTemplate.hincrBy("cache::user::order::count", users.userId, 1)
// 统计数据只在当天有效,所以隔天凌晨将会使用redis任务清除这个缓存。
// 第二天删除昨日统计的次数
jedisTemplate.hgetAll("cache::user::order::count").foreach(tupe => {
		// 这里tupe._1就是对应用户Id,tupe._2就是对应用户当天统计的数量
      jedisTemplate.hdel("cache::user::order::count", tupe._1)
})
  • 拉链操作
// 使用元组可以将他们映射起来使用zip方法
    val symbols = Array("<","-",">")
    val counts = Array(2,10,2)
    val pairs = symbols.zip(counts)
    println(pairs.toBuffer)
    // 打印<<---------->>
    for ((s,n) <- pairs) Console.print(s * n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值