2016-10-27 10 views
0

私たちは文字列のリストを持っており、それらを下のプログラムでグループ化しています。 入力:val k = List("a", "a", "a", "a", "b", "c", "c", "a", "a", "d", "e", "e", "e", "e")List Scalaの[List [String]]

出力:*List(List(a, a, a, a), List(b), List(c, c), List(a, a), List(d), List(e, e, e, e))*

プログラム:私は、リストの短所演算子を行う際に、下記のよう

def pack(ls:List[String]):List[List[String]]={ 

    val (a,next) = ls span {_ == ls.head} 

    if ((next) == Nil) List(a) 
    else a :: pack(next) 

    }   

はしかし、私は出力を得ます。

入力:

val a =List("a", "a", "a", "a")   
val b = List ("b")      
val c = List ("c", "c")    
val a1 = List("a", "a")     
val d = List("d")      
val e = List("e", "e", "e", "e")  

*List(a::b::c::a1::d::e)*     

出力:

*List(List(List(a, a, a, a), List(b), List(c, c), List(a, a), List(d), e, e, e, e))* 

私はScalaでは、単一のコマンドでは、以下のような出力をすることができます方法はありますか?

*List(List(a, a, a, a), List(b), List(c, c), List(a, a), List(d), List(e, e, e, e))* 
+0

私は、cons演算子について、そしてそれを "グループ化"関数の結果を模倣する方法であると思います。グループ化自体を実装する方法ではなく、実際には重複しているかどうかはわかりません。 –

+1

@TzachZoharええ、申し訳ありませんが、私は私の判断では速すぎました。再開 –

答えて

1
scala> a::b::c::a1::d::List(e) 
res0: List[List[String]] = List(List(a, a, a, a), List(b), List(c, c), List(a, a), List(d), List(e, e, e, e)) 

短所演算子はリストに項目を付加します - ので、あなたはその後、他のすべての項目一つ一つを付加したい場合は、最後の1周りListを構築します。これを考える

最も簡単な方法は、種類気付いている:List[List[String]]を構築する

  • を、短所演算子はに、右に左とList[List[String]]List[String]上で動作することを期待します新しいList[List[String]]を生成:左側の結果のリストで、右側の項目する必要があります - 同じタイプのリスト予想結果
  • としてあなたがd::eを書くとき、あなたはをやっています0、これは既にList[List[String]]を生成しないことを意味します - したがって、右辺は型を正しく取得するためにリストで "ラップ"されなければなりません:d::List(e)
  • List[List[String]]
  • 秒これが完了すると - あなたが追加し、あなたが::を使用して最終的な結果を達成するために計画している場合は、別のリスト
+0

説明をいただきありがとうございます。なぜ私のプログラムのList(a)が必要なのか、なぜList(e)が実行されなければならないのかが分かりました。再度、感謝します。 – keerthi

1

で全体結果をラップすることなく、期待される結果を得ますcons操作の最後にNilは、所望のr esult。

a::b::c::a1::d::e::Nil 

または@Tzachゾハルが述べたように、あなたはListで最後の要素をラップすることができます。

a::b::c::a1::d::List(e) 

それ以外の場合は[はい

List(a,b,c,a1,d,e) 
1

を使用しています。あなたが本当にその構文を使用する場合:

List(a::b::c::a1::d::e::Nil: _*) 

そうでなければ、List.apply()に(List型の)単一の要素を渡しているので、あなたが最後に: _*を必要とし、それがあるのシーケンス、として解釈されていませんなぜList[List]の代わりにList[List[List]]が得られるのですか?

関連する問題