リストオブジェクトをスカラーで並べ替え、リスト内の要素をソートしないでください。私はint型の二つのリストがある場合たとえば:リスト[Int]オブジェクトをスカラでソートするにはどうすればよいですか?
val l1 = List(1, 2, 3, 7)
val l2 = List(1, 2, 3, 4, 10)
を私は順序L1> L2でそれらを置くことができるようにしたいです。
私はそれが必要なことをするケースクラスを作成しましたが、問題を使用するときは他のメソッドは動作しません。クラス内の他のすべてのメソッド、つまりflatten、sortWithなどを実装する必要がありますか?
私のクラスのコードは次のようになります。
class ItemSet(itemSet: List[Int]) extends Ordered[ItemSet] {
val iSet: List[Int] = itemSet
def compare(that: ItemSet) = {
val thisSize = this.iSet.size
val thatSize = that.iSet.size
val hint = List(thisSize, thatSize).min
var result = 0
var loop = 0
val ths = this.iSet.toArray
val tht = that.iSet.toArray
while (loop < hint && result == 0) {
result = ths(loop).compare(tht(loop))
loop += 1
}
if (loop == hint && result == 0 && thisSize != thatSize) {
thisSize.compare(thatSize)
} else
result
}
}
を今、私はアイテムセットの配列を作成する場合、私はそれを並べ替えることができます。
val is1 = new ItemSet(List(1, 2, 5, 8))
val is2 = new ItemSet(List(1, 2, 5, 6))
val is3 = new ItemSet(List(1, 2, 3, 7, 10))
Array(is1, is2, is3).sorted.foreach(i => println(i.iSet))
scala> List(1, 2, 3, 7, 10)
List(1, 2, 5, 6)
List(1, 2, 5, 8)
私に問題を与えている2つの方法がある:
def itemFrequencies(transDB: Array[ItemSet]): Map[Int, Int] = transDB.flatten.groupBy(x => x).mapValues(_.size)
エラーは次のとおりです。
タイプマップ[何も、INT]の発現が期待されるタイプマップ[INT、INT]
に準拠していないと、この1のために:
def sortListAscFreq(transDB: Array[ItemSet], itemFreq: Map[Int, Int]): Array[List[Int]] = {
for (l <- transDB) yield
l.sortWith(itemFreq(_) < itemFreq(_))
}
私が取得:
は、シンボルを解決できませんsortWith。
List [Int]を拡張して他のメソッドの機能を失うことなくリストをソートできる方法はありますか?
ありがとうございました!私はちょうど2日を働かせようと努力したことを信じることができません。 –
@Val、それは皮肉なことだと思いますが、ポイントの欠落があります。リストの_array_は '.sorted'を呼び出す前にソートされていません。また、私はOPの例を使用しています。これは一般的には良い考えです。 –