Scala:我可以依靠Set中的项目顺序吗?
发布时间:2020-12-16 09:43:38 所属栏目:安全 来源:网络整理
导读:这是一个不起眼的惊喜: scala Set(1,2,3,4,5) res18: scala.collection.immutable.Set[Int] = Set(4,5,1,3)scala Set(1,5).toListres25: List[Int] = List(5,4) 这个例子本身就是对我的问题提出了一个“不”的答案。那么ListSet呢? scala import scala.col
这是一个不起眼的惊喜:
scala> Set(1,2,3,4,5) res18: scala.collection.immutable.Set[Int] = Set(4,5,1,3) scala> Set(1,5).toList res25: List[Int] = List(5,4) 这个例子本身就是对我的问题提出了一个“不”的答案。那么ListSet呢? scala> import scala.collection.immutable.ListSet scala> ListSet(1,5) res21: scala.collection.immutable.ListSet[Int] = Set(1,5) 这个似乎是有效的,但我应该依靠这个行为吗? 顺便说一下,我知道List中的distict方法。问题是,我想在界面级别强制执行项目的唯一性(同时保留顺序),所以使用distinct会弄乱我的整洁设计。 编辑 ListSet看起来不是很可靠: scala> ListSet(1,5).toList res28: List[Int] = List(5,1) EDIT2 在我寻找一个完美的设计我试过这个: scala> class MyList[A](list: List[A]) { val values = list.distinct } scala> implicit def toMyList[A](l: List[A]) = new MyList(l) scala> implicit def fromMyList[A](l: MyList[A]) = l.values 哪个实际工作: scala> val l1: MyList[Int] = List(1,3) scala> l1.values res0: List[Int] = List(1,3) scala> val l2: List[Int] = new MyList(List(1,3)) l2: List[Int] = List(1,3) 但是,问题是我不想将MyList暴露在库外。有什么办法可以隐含的转换超越吗?例如: trait T { def l: MyList[_] } object O extends T { val l: MyList[_] = List(1,3) } scala> O.l mkString(" ") // Let's test the implicit conversion res7: String = 1 2 3 我想这样做: object O extends T { val l = List(1,3) } // Doesn't work 解决方法
我相信你不应该依靠一套的订单。没有语言
除此之外,看看this question这个深入的讨论。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |