使用Scala实现链表(List)数据结构

大数据必学Scala(十六):基础语法学习 列表 List 重点掌握 目录 列表 List 重点掌握 不可变列表定义 可变列表 列表常用操作 列表 List 重点掌握 列表是scala中最重要的、也是最常用的数据结构。List具备以下性质: 可以保存重复的值 有先后顺序 在scala中,也有两种列表,一种是不可变列表、另一种是可变列表 不可变列表定义 不可变列表就是列表的元素、长度都是不可变的。 语法 使用List(元素1, 元素2, 元素3, ...)来创建一个不可变列表,语法格式: val/var变量名 =List(元素1,元素2,... 阅读详情

这个例子来源于scala圣经级教程《Functional Programming in Scala》,由于本人跟着书中的代码敲了一遍,然后写了点测试代码验证了一下正确性,所以就放在这做个备忘吧。贴出来只是为了方便自己得意,如果看不懂,但是又感兴趣的就去看原书吧偷笑偷笑偷笑。

package fpinscala.datastructures

sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]

object List {

  def sum(ints: List[Int]): Int = ints match {
    case Nil => 0
    case Cons(x, xs) => x + sum(xs)
  }

  def product(ds: List[Double]): Double = ds match {
    case Nil => 1.0
    case Cons(0.0, _) => 0.0
    case Cons(x, xs) => x * product(xs)
  }

  def apply[A](as: A*): List[A] = if (as.isEmpty) Nil else Cons(as.head, apply(as.tail: _*))


  def append[A](a1: List[A], a2: List[A]): List[A] =
    a1 match {
      case Nil => a2
      case Cons(h, t) => Cons(h, append(t, a2))
    }

  def sum2(ns: List[Int]) = foldRight(ns, 0)(_ + _)

  def product2(ns: List[Double]) = foldRight(ns, 1.0)(_ * _)

  def tail[A](l: List[A]): List[A] = l match {
    case Nil => sys.error("tail of empty list")
    case Cons(_, t) => t
  }

  def setHead[A](l: List[A], h: A): List[A] = l match {
    case Nil => sys.error("tail of empty list")
    case Cons(_, t) => Cons(h, t)
  }

  def drop[A](l: List[A], n: Int): List[A] =
    if (n <= 0) l else l match {
      case Nil => Nil
      case Cons(_, t) => drop(t, n - 1)
    }

  def dropWhile[A](l: List[A], f: A => Boolean): List[A] =
    l match {
      case Cons(h, t) if f(h) => dropWhile(t, f)
      case _ => l
    }

  def init[A](l: List[A]): List[A] = l match {
    case Nil => sys.error("init of empty list")
    case Cons(_, Nil) => Nil
    case Cons(h, t) => Cons(h, init(t))
  }

  def init2[A](l: List[A]): List[A] = {
    import scala.collection.mutable.ListBuffer;
    val buf = new ListBuffer[A];

    @annotation.tailrec
    def go(cur: List[A]): List[A] = cur match {
      case Nil => sys.error("init of empty list")
      case Cons(_, Nil) => List(buf.toList: _*)
      case Cons(h, t) => buf += h; go(t)
    }

    go(l)
  }

  def lenght[A](l: List[A]): Int = foldRight(l, 0)((_, acc) => acc + 1)

  def sum3(l: List[Int]): Int = foldLeft(l, 0)(_ + _)

  def product3(l: List[Double]) = foldLeft(l, 1.0)(_ * _)

  def length2[A](l: List[A]): Int = foldLeft(l, 0)((acc, _) => acc + 1)

  def reverse[A](l: List[A]): List[A] = foldLeft(l, List[A]())((acc, h) => Cons(h, acc))

  def foldRightViaFoldLeft[A, B](l: List[A], z: B)(f: (A, B) => B): B = foldLeft(reverse(l), z)((b, a) => f(a, b))

  def foldRight[A, B](as: List[A], z: B)(f: (A, B) => B): B =
    as match {
      case Nil => z
      case Cons(x, xs) => f(x, foldRight(xs, z)(f))
    }

  @annotation.tailrec
  def foldLeft[A, B](l: List[A], z: B)(f: (B, A) => B): B = l match {
    case Nil => z
    case Cons(h, t) => foldLeft(t, f(z, h))(f)
  }

  def foldRightViaFoldLeft_1[A, B](l: List[A], z: B)(f: (A, B) => B) =
    foldLeft(l, (b: B) => b)((g, a) => b => g(f(a, b)))(z)

  def foldLeftViaFoldRight[A, B](l: List[A], z: B)(f: (B, A) => B): B =
    foldRight(l, (b: B) => b)((a, g) => b => g(f(b, a)))(z)

  def appendViaFoldRight[A](l: List[A], r: List[A]): List[A] =
    foldRight(l, r)(Cons(_, _))

  def concat[A](l: List[List[A]]): List[A] = foldRight(l, Nil: List[A])(append)

  def add1(l: List[Int]): List[Int] = foldRight(l, Nil: List[Int])((h, t) => Cons(h + 1, t))

  def doubleToString(l: List[Double]): List[String] =
    foldRight(l, Nil: List[String])((h, t) => Cons(h.toString, t))


  def map[A, B](l: List[A])(f: A => B): List[B] =
    foldRight(l, Nil: List[B])((h, t) => Cons(f(h), t))


  def map_1[A, B](l: List[A])(f: A => B): List[B] =
    foldRightViaFoldLeft(l, Nil: List[B])((h, t) => Cons(f(h), t))

  def map_2[A, B](l: List[A])(f: A => B): List[B] = {
    val buf = new scala.collection.mutable.ListBuffer[B]

    def go(l: List[A]): Unit = l match {
      case Nil => ()
      case Cons(h, t) => buf += f(h); go(t)
    }

    go(l)
    List(buf.toList: _*)
  }

  def filter[A](l: List[A])(f: A => Boolean): List[A] =
    foldRight(l, Nil: List[A])((h, t) => if(f(h)) Cons(h, t) else t)

  def filter_1[A](l: List[A])(f: A => Boolean): List[A] =
    foldRightViaFoldLeft(l, Nil: List[A])((h, t) => if(f(h)) Cons(h, t) else t)


  def filter_2[A](l: List[A])(f: A => Boolean): List[A] = {
    val buf = new scala.collection.mutable.ListBuffer[A]

    def go(l: List[A]): Unit = l match {
      case Nil => ()
      case Cons(h, t) => if(f(h)) buf += h; go(t)
    }
    go(l)
    List(buf.toList: _*)
  }

  def flatMap[A, B](l: List[A])(f: A => List[B]): List[B] =
    concat(map(l)(f))

  def filterViaFlatMap[A](l: List[A])(f: A => Boolean): List[A] =
    flatMap(l)(a => if(f(a)) List(a) else Nil)

  def addPairWise(a: List[Int], b: List[Int]): List[Int] = (a, b) match {
    case (Nil, _) => Nil
    case (_, Nil) => Nil
    case (Cons(h1, t1), Cons(h2, t2)) => Cons(h1 + h2, addPairWise(t1, t2))
  }

  def zipWith[A, B, C](a: List[A], b: List[B])(f: (A, B) => C): List[C] = (a, b) match {
    case (Nil, _) => Nil
    case (_, Nil) => Nil
    case (Cons(h1, t1), Cons(h2, t2)) => Cons(f(h1, h2), zipWith(t1, t2)(f))
  }

  @annotation.tailrec
  def startWith[A](l: List[A], prefix: List[A]): Boolean = (l, prefix) match {
    case (_, Nil) => true
    case (Cons(h, t), Cons(h2, t2)) if h == h2 => startWith(t, t2)
    case _  => false
  }

  @annotation.tailrec
  def hasSubsequence[A](sup: List[A], sub: List[A]): Boolean = sup match {
    case Nil => sub == Nil
    case _ if startWith(sup, sub) => true
    case Cons(h, t) => hasSubsequence(t, sub)
  }



  /**
    * 测试
    * @author lihong10 2018/7/3 10:07:00
    * @param args
    * return void
    */
  def main(args: Array[String]): Unit = {


    val liStr: List[String]  = List("wo", "shi", "zhong", "guo", "ren", "ni", "shi", "sha", "bi")
    val liStrSub = List("ni", "shi", "sha", "bi")
    println(liStr)

    val hasSubSeq = List.hasSubsequence(liStr, liStrSub)
    println(hasSubSeq)

    val doubleELe = List.map(liStr)((a: String)  => a * 2)
    println(doubleELe)

    val lenGt3 = List.filter(liStr)((a: String) => a.length > 3)
    println(lenGt3)


    println(List.lenght(liStr))

    val liInt = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
    val add1 = List.add1(liInt)
    println(add1)

    println("sum:" + List.sum(liInt))


    println("foldLeft with 1000: " + List.foldLeft(liInt, 1000)(_ + _))

    println(List.reverse(liInt))

    val init = List.init(liInt)
    println("init: " + init)

    val tail = List.tail(liInt)
    println("tail: " + tail)

    val dropLe5 = List.dropWhile(liInt, (a: Int) => a <= 5)
    println(dropLe5)

    val lili = List(List(1, 3, 5, 7), List(2, 4, 6, 8))
    val concated = List.concat(lili)
    println(concated)

    val zipList = List.zipWith(List(1, 3, 5, 7), List(2, 4, 6, 8))((_, _))
    println(zipList)

    val addPair = List.addPairWise(List(1, 2, 3, 4), List(4, 3, 2, 1))
    println(addPair)


    val join = List.foldRightViaFoldLeft(List(1, 3, 5, 7, 9, 11, 13, 15, 17, 19), "")((a: Int, b: String) => b + a.toString)
    println(join)
  }

}








上述代码的运行结果是:

Cons(wo,Cons(shi,Cons(zhong,Cons(guo,Cons(ren,Cons(ni,Cons(shi,Cons(sha,Cons(bi,Nil)))))))))
true
Cons(wowo,Cons(shishi,Cons(zhongzhong,Cons(guoguo,Cons(renren,Cons(nini,Cons(shishi,Cons(shasha,Cons(bibi,Nil)))))))))
Cons(zhong,Nil)
9
Cons(2,Cons(3,Cons(4,Cons(5,Cons(6,Cons(7,Cons(8,Cons(9,Cons(10,Nil)))))))))
sum:45
foldLeft with 1000: 1045
Cons(9,Cons(8,Cons(7,Cons(6,Cons(5,Cons(4,Cons(3,Cons(2,Cons(1,Nil)))))))))
init: Cons(1,Cons(2,Cons(3,Cons(4,Cons(5,Cons(6,Cons(7,Cons(8,Nil))))))))
tail: Cons(2,Cons(3,Cons(4,Cons(5,Cons(6,Cons(7,Cons(8,Cons(9,Nil))))))))
Cons(6,Cons(7,Cons(8,Cons(9,Nil))))
Cons(1,Cons(3,Cons(5,Cons(7,Cons(2,Cons(4,Cons(6,Cons(8,Nil))))))))
Cons((1,2),Cons((3,4),Cons((5,6),Cons((7,8),Nil))))
Cons(5,Cons(5,Cons(5,Cons(5,Nil))))
191715131197531


昇腾910安装驱动出错,降低Centos7.6的内核版本 Centos7.6 启动内核修改,解决昇腾910安装驱动错误的问题。 阅读详情

相关推荐

IEEE GRSL投稿全流程避坑指南:从Latex模板到校样缴费,新手必看的7个关键节点

本文详细解析了IEEE GRSL投稿全流程中的7个关键节点,从LaTeX模板选择到校样缴费,帮助新手避免常见陷阱。特别针对图像格式转换、审稿意见回复、版权转移等环节提供实用技巧,确保投稿过程高效顺利。

weixin_28720573的博客 573

【Scala】Scala 之数据结构

文章目录数据结构1、数据结构特点2 、数组 Array3 、元组 Tuple4 、列表 List5 、 队列 Queue7 、集 Set8 、集合元素与函数的映射9 、化简、折叠、扫描10 、拉链11、迭代器12 、流 Stream13 、视图 View14 、线程安全的集合15 、并行集合16、操作符 数据结构 1、数据结构特点 Scala同时支持可变集合和不可变集合,不可变集合从不可变,可以安...

beautiful_huang的博客 735

5个IO口驱动188数码管:查理复用算法在TM52F1363上的极致应用

本文深入解析了如何利用查理复用算法,在TM52F1363单片机上仅用5个IO口驱动188数码管。通过精密的硬件连接与软件时序控制,结合高阻态和动态扫描策略,实现了在极致资源限制下的稳定显示,为成本敏感型嵌入式产品提供了高效的IO复用解决方案。

numpy6sculptor的博客 481

Scala 优雅入门 (八) 数据结构 - 列表

List Scala 中的 List 和 Java List 不一样,在 Java 中 List 是一个接口,真正存放数据是 ArrayList,而 Scala 的 List 可以直接存放数据,就是一个 object,默认情况下 Scala 的 List 是不可变的,List 属于序列 Seq val List = scala.collection.immutable.List ...

RayfunC的博客 350

啥是PLCnext?它能干啥?

简单来说,PLCnext是基于Linux操作系统的一个控制器运行时,所以它原生具备的两个特点:1.原生兼容IEC611312.原生兼容Linux各类应用PLCnext的控制器大概长下面这样(AXC F 1152、2152),通过背板总线连接IO、通过网口连接Profinet或者上位机。

博客 1649

Windows server 2012R2安装Oracle11g

打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Database Configuration Assistant。打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Net Configuration Assistant。首先打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。选择仅安装数据库软件。

qq_74770105的博客 3596

scala数据结构(四):链表

文章目录链表单向链表 链表 链表是一种有序列表.其中的各对象按线性顺序排列 数组的线性顺序是由数组下标决定的,而链表的顺序是由各个对象里的指针决定的 使用链表结果可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分使用计算机内存空间,灵活的内存动态管理,但是链表失去了数组随机读取的优点,同时链表由于增加了节点的指针域,空间开销比较大 链表作为一种基础的数据结构,可以用来生成其他类型的数据结构,可以分为单向链表,双向链表,循环链表 单向链表 单向链表是最简单的链表,它包含两个域,一个是信息域,一个是指

张不帅 1137

D类功放几种常见“爆破音”问题根源与改善措施

在数字D类功放刚上电或功放播放状态切换时,人耳偶尔会听到“嘣”的声音,我们把这个爆破的Pop Noise。数字功放Pop Noise 出现的原因有很多,本文主要分析Pop Noise 出现原因,并提供相应解决方法。

qq_26815321的博客 3594

《scala函数式编程》数据结构之List列表

 XML Code    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ...

凌夜知惜 719

YOLOv8改进——引入可变形卷积DCNv3

本文只讲解在YOLOv8的代码中添加DCNv3的操作流程, 具体的原理参见上述的链接~是pytorch实现的版本,只要基础的pytorch环境安装正确就不会出错。是C++实现版本,必须先在上一步编译成功,或者安装好了轮子,否则会报错。但是在实际的训练过程中,C++版本的运行速度更快,推荐使用C++版本。(具体怎么修改,都可以自己决定,然后通过实验看看效果如何)文件夹,该文件夹下的内容就是实现DCNv3算子的核心代码。中,下图中的列表里添加。

zyw2002的博客 3万+

YOLO26 FP16/INT8混合量化实战:精度无损+速度拉满,边缘设备部署最优解

这是混合量化的灵魂,告诉量化器:哪些层不准动,保留FP16。"""判断是否为量化敏感层 → 是则豁免为FP16返回 True=敏感层(FP16),False=可量化(INT8)"""# 1. 检测头回归分支# 2. 小通道1×1卷积# 3. SiLU 激活# 4. 残差ShortcutYOLO26想要在Jetson、RK3588、昇腾、嵌入式NPU上真正落地,FP16/INT8混合量化是唯一最优解。它的核心逻辑不是玄学,而是工程上的精准取舍能量化的层,全部INT8榨性能;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 747

Scala 数据结构与集合

1. 数据结构概述 1.1 数据结构(Data Structure) 数据结构讨论在抽象层面上,一组具有一定关系的数据元素的存储及处理。 需要了解: 数据元素之间逻辑关系的分类,每种逻辑关系对应的操作 每种逻辑关系在计算机内部的存储模式 对于每种存储模式和操作的实现过程 1.2 逻辑结构(Logical Structure) 描述数据元素之间的逻辑关系,是数据结构研究的子范畴 逻辑结构分为线性结构、树状结构、集合结构、图状结构 数据结构研究并给出每种逻辑结构处理办法 1.2.1 线性结构(Linear

weixin_47243236的博客 822

SAP S/4HANA Cloud 管理员业务角色创建实战:基于 SAP_BR_ADMINISTRATOR 模板的一站式指南

摘要:SAP S/4HANA Cloud新系统初始登录时常见Fiori Launchpad无磁贴的问题,这是由于缺乏合适的业务角色分配。本文介绍了通过预交付的SAP_BR_ADMINISTRATOR模板创建管理员角色的完整流程,包括业务用户、业务角色和业务目录的核心概念解析。重点说明了直接使用模板的风险,并提供了从模板创建自定义管理员角色的详细步骤(4.1-4.3),以及权限限制设置的注意事项。文中还分享了一个实际项目案例,强调正确配置管理员角色对后续权限体系建设的关键作用。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 211

Scala 链表 列表 List

Scala列表与数组非常相似,列表的所有元素都具有相同的类型,但有两个重要的区别。 首先,列表是不可变的,列表的元素不能通过赋值来更改。 其次,列表表示一个链表,而数组是平的。 具有类型T的元素的列表的类型被写为List[T]。 尝试以下示例,这里列出了为各种数据类型定义的列表。 // List of Strings val fruit: List[String] = List("appl...

Simple 专栏 1747

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Scala:Scala的List

例如,定义一个Stream,Stream(1,2,3)等价于1#::2#::3::Stream.empty。左折叠运算由初始值、操作符、List 和操作组成,即(z/:List)(op)等价于op(op(op(z,a),b),c)。例如 List(1,2)=11,List(3,4)=12,结合这两个集合可以使用11:::12=(1,2,3,4)。右折叠是 List 在前,即(List(a,b,e):lz)(op)等价于op(a,p(b,op(c,z)))。的集合,无论大小还是元素,都是不可变的。

2402_87106544的博客 857

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Scala之List

文章目录Scala之List数据结构List的基本操作List类的一阶函数:::lengthinit and lastreverse Scala之List 数据结构 scala.collection.immutable.List是有序集合的不可以变的链表,它是递归结构 它有两个实现的case class 'scala.Nil’和’scala.::,它们实现的抽象的成员 ‘isEmpty’,‘hea...

李鬼989的专栏 1247

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Scala List

Scala里List的设计 Scala List Scala中Array和List的区别 Scala API文档——ListScala中列表非常类似于数组,这意味着,一个列表的所有元素都具有相同的类型,但有两个重要的区别。首先,列表是不可变的,这意味着一个列表的元素可以不被分配来改变。第二,列表表示一个链表,而数组是平坦的。// List of Strings val fruit:List[S

power0405hf的专栏 548

Scala 的List

在集合中添加多个集合元素使用..方式,例如 List(1,2)=11,List(3,4)=12,结合这两个集合可以使用1:12=(1,2,3,4)。Scala中的List 与Java中的完全不同,它是基于链表实现的并且是一个不可变的集合,无论大小还是元素都是不可变的。首先,列表是不可变的,值一旦被定义了就不能改变,其次,列表具有递归的结构(也就是链表结构), 而数组不是。定义List的类型方式为List[T],T表示数据类型,指定List集合中只能存放T类型的元素。2.Scala的List的类型。

2301_81748087的博客 803

Scala语言的链表合并

链表是一种线性数据结构,由一系列节点组成。每个节点包含两个部分:数据部分和指向下一个节点的引用(或指针)。与数组相比,链表在插入和删除操作上更为灵活,尤其是在不知道数据规模的情况下。链表合并操作在Scala编程中扮演着重要角色,不仅提高了数据处理的效率,还为解决复杂问题提供了灵活的解决方案。通过对Scala中的链表及其合并方法的深入理解,程序员可以更好地运用这一数据结构,优化自己的代码。未来,Scala可能会引入更多高级的链表操作方法,结合新出现的函数式编程特性,使得链表处理更加简洁高效。

2501_91226779的博客 318

Scala List & Set

Scala List & Set

mxk4869的博客 984

scala求list长度

//右折叠 从最右端开始真正的计算 def foldRight[A, B](as: List[A], z: B)(f: (A, B) =&gt; B): B = as match { case Nil =&gt; z case Cons(t, h) =&gt; f(t, foldRight(h, z)(f)) case Cons(t, h) =&gt; foldLeft...

zhaoyu_nb的博客 2932

Scala中的List(链表)

但是可以使用:+和:::操作符创建一个新的列表,其中包含添加或移除的元素。可以使用map方法对列表中的每个元素进行映射操作,返回一个新的列表。可以使用groupBy方法根据某个属性对列表进行分组,然后使用mapValues方法对每个分组进行聚合操作。可以使用::操作符将元素添加到列表中,或者使用List()构造函数创建一个空列表。可以使用sorted方法对列表进行排序,使用reverse方法反转列表。可以使用apply方法或()操作符访问列表中的元素。可以使用foreach方法遍历列表中的每个元素。

2402_87076719的博客 275

scala 定义空的list_Scala入门之List使用详解

Scala中使用ListScala是函数式风格与面向对象共存的编程语言,方法不应该有副作用是函数风格编程的一个重要的理念。方法唯一的效果应该是计算并返回值,用这种方式工作的好处就是方法之间很少纠缠在一起,因此就更加可靠和可重用。另一个好处(静态类型语言)是传入传出方法的所有东西都被类型检查器检查,因此逻辑错误会更有可能把自己表现为类型错误。把这个函数式编程的哲学应用到对象世界里以为着使对象不可变。...

weixin_39836536的博客 993

scala的List

A.可变的List 叫ListBuFTer;B.Lisl的无来还是可以通讨下标来修改的。C.使用ListBurrer需要提前导入对于的包;D.默认的List是不可变的。1.在Scala 中,关于不可变List 和可变List的说法错误的是?C.if语句和foreach方法;A.for循环和while循环;B.for循环和foreach方法。C.添加元素到不可变列表;D.合并两个列表中的元素,并消除重复的。4.对于不可变List,如果要添加新元素,会怎样?A.添加元素到可变列表;C.创建一个新的List;

2301_82118291的博客 628

数据结构之scala 实现链表

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33863087的博客 266

Scala数据结构和算法:链表(Linked List)、单链表与双链表、链表介绍、单向链表、双向链表、环形链表、环形链表解决Josephu问题

链表介绍 链表是有序的列表,但是它在内存中是存储如下: 链表在内存中不一定是连续分布. [链表是学习 树,森林,图的基础] // 链表的优点 1. 插入,删除,很快, 缺点是检索速度慢. => 树结构(AVL, 红黑树) 单链表的介绍 单链表(带头结点) 逻辑结构示意图如下 单链表的应用实例 使用带head头的单向链表实现 –水浒英雄排行榜管理 1)完成对英雄人物的增删...

qq_43265673的博客 1081
上一篇: POM中引入CXF后maven-shade-plugin打包示例
下一篇: 使用Scala实现Option数据结构
lhever_
博客等级 码龄14年 213粉丝 130原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值