gpt4 book ai didi

scala - 列出任何类型排序

转载 作者:行者123 更新时间:2023-12-01 09:32:28 24 4
gpt4 key购买 nike

我有一个 list 。但类型是任何。

// list: List[List[Any]] = List(List(b, 50), List(a, 25), List(i, 60))
val list = List( List("b", 50), List("a", 25), List("i", 60))


// sort should be list(0)(0) "String" sort
("a", 25), ("b", 50), ("i", 60)

// or list(0)(1) "Integer" sort
("a", 25), ("b", 50), ("i", 60)

我想排序。我能怎么做?提前谢谢你。

最佳答案

尝试像这样对列表进行排序本质上是不安全的,因为编译器无法保证内部列表的元素具有正确的类型。也许最安全的方法是使用 match 来转换特定元素,并引发异常是数据不是应该的。

list.sortBy(x =>
x(0) match {
case s: String => s
case _ => sys.error("not a string")
})
//> res0: List[List[Any]] = List(List(a, 25), List(b, 50), List(i, 60))

list.sortBy(x =>
x(1) match {
case i: Int => i
case _ => sys.error("not an integer")
})
//> res1: List[List[Any]] = List(List(a, 25), List(b, 50), List(i, 60))

也就是说,听起来您真正需要的是一个 (String, Int) 元组的列表。这样编译器就可以保证安全:

val list2 = List(("b", 50), ("a", 25), ("i", 60))                                                  
//> list2 : List[(java.lang.String, Int)] = List((b,50), (a,25), (i,60))

请注意,编译器知道内部元素的类型。所以排序更容易,更安全:

list2.sortBy(_._1)                              
//> res2: List[(java.lang.String, Int)] = List((a,25), (b,50), (i,60))
list2.sortBy(_._2)
//> res3: List[(java.lang.String, Int)] = List((a,25), (b,50), (i,60))

关于scala - 列出任何类型排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13680645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com