[随笔] Scala trunk新加入的几个排列组合相关的方法
Eastsun
2011-01-26
1. SeqLike#permutations: Iterator[This] 2. SeqLike#combinations(n: Int): Iterator[This] 3. SetLike#subsets(n: Int): Iterator[This] & SetLike#subsets: Iterator[This] 这几个方法目前都是我实现的,其用处从方法名就可以看出。这里需要注意的几点 a. permutations与combinations都允许Seq中有重复元素,并且能得到正确的结果。 b. permutations与combinations对Seq中元素的类型没有任何要求(特别地:不需要是Oredered的子类型),并且返回的Iterator在某种意义上按“字典顺序”排列(特别的,如果Seq中的元素已经是有序的【正序或逆序】,那么得到的Iterator一定是字典排序的【正序或逆序】)。 c. 虽然对于大部分Set来说,不能保证里面的元素是有顺序的;但SetLike#subsets返回的Iterator在某种意义上也是按照“字典顺序”排列的。 d. 目前“字典排序”这个特点并没有写到scala docs中去。不过我觉得是非常有用的,以后我会向extempore建议加进去。 下面举两个例子说明: 引用 scala> "ababc".permutations foreach println
aabbc aabcb aacbb ababc abacb abbac abbca abcab abcba acabb acbab acbba baabc baacb babac babca bacab bacba bbaac bbaca bbcaa bcaab bcaba bcbaa caabb cabab cabba cbaab cbaba cbbaa scala> val set = collection.immutable.SortedSet(1,2,3,4) set: scala.collection.immutable.SortedSet[Int] = TreeSet(1, 2, 3, 4) scala> set.subsets foreach println TreeSet() TreeSet(1) TreeSet(2) TreeSet(3) TreeSet(4) TreeSet(1, 2) TreeSet(1, 3) TreeSet(1, 4) TreeSet(2, 3) TreeSet(2, 4) TreeSet(3, 4) TreeSet(1, 2, 3) TreeSet(1, 2, 4) TreeSet(1, 3, 4) TreeSet(2, 3, 4) TreeSet(1, 2, 3, 4) scala> "ababc".combinations(2) foreach println aa ab ac bb bc |
|
messi_18
2011-03-03
scala 2.9什么时候能出?那时候stm是不是就加进去了?
|
|
Eastsun
2011-03-06
应该快了,本来很早之前Scala Team就准备发布Scala 2.9的RC版了,但反对的声音很多,就不了了之。
不过从Scala2.8以来,因为改动太大,一直不是太稳定,每个版本都有一些小变换。估计要等到Scala3.0才会稳定下来。 另外Scala IO也出0.1了,但我怀疑Scala IO的作者是不是名气不过,关注的人非常少。 |