@@ -23,41 +23,31 @@ fun Iterable<Boolean>.alwaysTrue() = all { it }
2323 * 最好先判断维数相同
2424 */
2525infix fun Iterable<Double>.contentEquals (other : Iterable <Double >) =
26- zip(other, ::doubleEquals).alwaysTrue()
26+ zip(other, ::doubleEquals).alwaysTrue()
2727
2828/* *
2929 * 判断两个浮点列表相同
3030 * 最好先判断维数相同
3131 */
3232infix fun DoubleArray.contentEquals (other : List <Double >) =
33- zip(other, ::doubleEquals).alwaysTrue()
33+ zip(other, ::doubleEquals).alwaysTrue()
3434
3535/* *
3636 * 计算许多元素的哈希值
3737 * 慎用!有递归风险!
3838 */
3939fun hash (vararg elements : Any? ) =
40- elements.fold(0 ) { code, it -> code.hashCode() * 31 + (it?.hashCode() ? : 0 ) }
40+ elements.fold(0 ) { code, it -> code.hashCode() * 31 + (it?.hashCode() ? : 0 ) }
4141
42- /* *
43- * 判断一个可迭代集中所有元素存在相等关系
44- */
4542fun <T > Iterable<T>.isUnique () = toSet().size == 1
46-
47- /* *
48- * 判断一个可迭代集中所有元素存在某种相等关系
49- */
50- inline infix fun <T , U > Iterable<T>.uniqueOn (block : (T ) -> U ) = map(block).isUnique()
51-
52- /* *
53- * 总结一个可迭代集中所有元素的特征
54- */
5543fun <T > Iterable<T>.uniqueValue (): T ? = toSet().singleOrNull()
44+ inline fun <T , U > Iterable<T>.uniqueOn (block : (T ) -> U ) = map(block).isUnique()
45+ inline fun <T , U > Iterable<T>.uniqueValue (block : (T ) -> U ): U ? = map(block).uniqueValue()
5646
57- /* *
58- * 总结一个可迭代集中所有元素的某项特征
59- */
60- inline infix fun <T , U > Iterable <T>.uniqueValue (block : (T ) -> U ): U ? = map(block).uniqueValue()
47+ fun < T > Sequence<T>. isUnique () = toSet().size == 1
48+ fun < T > Sequence<T>. uniqueValue (): T ? = toSet().singleOrNull()
49+ fun < T , U > Sequence<T>. uniqueOn ( block : ( T ) -> U ) = map(block).isUnique()
50+ fun <T , U > Sequence <T>.uniqueValue (block : (T ) -> U ): U ? = map(block).uniqueValue()
6151
6252internal inline fun <T , U > List<T>.zipFast (other : List <T >, block : (T , T ) -> U ) =
63- List (kotlin.math.min(size, other.size)) { block(this [it], other[it]) }
53+ List (kotlin.math.min(size, other.size)) { block(this [it], other[it]) }
0 commit comments