加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在Scala中对大写和小写字符串进行排序

发布时间:2020-12-16 09:07:27 所属栏目:安全 来源:网络整理
导读:Scala中有一个字符串列表.让我们假设这些字符串只包含英文字母(小写和大写).以下是示例清单: val l1 = List("ab","aa","bc","Aa","Ab","Ba","BB") 当我们用以下代码对它进行排序时: l1.sortWith(_ _) 我们会收到: List(Aa,Ab,BB,Ba,aa,ab,bc) 所以这种排
Scala中有一个字符串列表.让我们假设这些字符串只包含英文字母(小写和大写).以下是示例清单:

val l1 = List("ab","aa","bc","Aa","Ab","Ba","BB")

当我们用以下代码对它进行排序时:

l1.sortWith(_ < _)

我们会收到:

List(Aa,Ab,BB,Ba,aa,ab,bc)

所以这种排序使用字母之间的以下关系:

A < B < C < ... < a < b < c ...

我们也可以使用:

l1.sortWith(_.toLowerCase < _.toLowerCase)

接收:

List(aa,Aa,bc)

所以现在字母之间的关系是:

(a=A) < (b=B) < (c=C) ...

但是如何使用以下字母顺序在Scala中对它们进行排序? :

a < A < b < B < c < C ...

所以结果应该是;

List(aa,bc,BB)

解决方法

scala> def compareChar(c1:Char,c2:Char) = {
         if ( c1 == c2 ) None
         else if (c1.toLower == c2.toLower) Some(c2.isUpper)
         else Some(c1.toLower < c2.toLower)
       }
compareChar: (c1: Char,c2: Char)Option[Boolean]

scala> def compareString(s1:String,s2:String) : Boolean = {
         (s1 zip s2).collectFirst {
           case (c1,c2) if (compareChar(c1,c2).isDefined) => compareChar(c1,c2).get
         }.getOrElse(s1.length < s2.length)
       }
compareString: (s1: String,s2: String)Boolean

scala> l1 sortWith compareString
res02: List[String] = List(aa,BB)

编辑:
内联版本:

def compareString(s1:String,s2:String) : Boolean = {
  (s1 zip s2).collectFirst {
    case (c1,c2) if c1 == c2 => compareString(s1.tail,s2.tail)
    case (c1,c2) if c1.toLower == c2.toLower => c2.isUpper // same letter,different case,uppercase wins
    case (c1,c2) => c1.toLower < c2.toLower
  }.getOrElse(s1.length < s2.length) // same prefix,the longest string is bigger
}
scala> val l1 = List("ab","BB")
l1: List[String] = List(ab,BB)

scala> l1 sortWith compareString
res0: List[String] = List(aa,BB)

scala> List("ABC","AB") sortWith compareString
res1: List[String] = List(AB,ABC)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读