java - Scala中的排序方法

标签 java scala sorting

我想为 scala Array 扩展一个排序方法,它可以返回原始索引。

下面是我写的代码:

object ArrayExtend {
implicit class ArrayExtension(val array: Array[Int]) {
    def argSort(): Array[Int] = {
                var tupleArray = for (i <- 0 until array.length) yield (i, array(i))     

                    tupleArray = tupleArray.sortWith((x,y)=> x._2 < y._2)

                    val result = for((index,_) <- tupleArray) yield index

                    return result.toArray

    }
}


def main(args:Array[String]){
val array = Array(5,4,3,2,0)
for(i <- array.argSort()) print(i)
}

此代码适用于 Array[Int],我如何将此方法扩展到所有不同类型的数组?我在 AnyRef 类中没有找到任何比较方法。

最佳答案

如果你需要那个类型就够了 T可以隐式转换为 Ordered[T] .通常它会通过使用 (implicit converter: T => Ordered[T]) 向类或方法参数添加隐式转换器来完成。 ,但是 scala 提供了 View 边界 <% 正是针对这种情况。摘自本书:您可以将“T <% Ordered[T]”想象成一句话。 “我可以使用任何 T,只要 T 可以被视为 Ordered[T]。”

所以代码看起来像这样:

implicit class ArrayExtension[T <% Ordered[T]](val array: Array[T]) {
  def argSort = array.zipWithIndex.sortBy(_._1).map(_._2).toArray
}

val array = Array(5,4,3,2,0)
val array2 = Array(5f,4f,3f,2f,0f)

array.argSort foreach print //43210
println
array2.argSort foreach print //43210

关于java - Scala中的排序方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29070840/

相关文章:

用于检查邮箱中电子邮件的Java示例代码?

java - 如何实现一个真正的异步 java 线程

java - 将 Putty 连接到 SSLSocket

scala - Play : How to implement action composition

Python .sort() 没有对数字进行完全排序

c - c中相等大小的char数组列表的qsort

java - 在android中管理多个异步任务

java - 删除两个重复行

scala - 基于代理/参与者的并发设计的设计模式

java - 如何在不使用 collections.sort() 的情况下按字母顺序对数组列表进行排序;