2017-12-08 18 views
-2

さて、このになるはずですが、私はそれを何時間も働かせようとしています。簡単なScalaフィルタは簡単ではありません

私は、List(Tuple2(String,Int) ...)を持っているが、例えば、このデータ:私は2番目の要素を持つ唯一のタプルのためにそれをフィルタリングする

('PAUL ANKA',0) 
('PAUL ANKA',0) 
('P. ANKA /G. HAMILTON /J. NASH',0) 
('PAUL ANKA',0) 
('PAUL ANKA',0) 
('PAUL ANKA',1) 
('PAUL ANKA',0) 
('PAUL ANKA',0) 
('PAUL ANKA',0) 
('PAUL ANKA',0) 

== 1

それは些細なようだ:

mylist.filter(_._2 == 1) 

ただし、だから私は試しました

mylist.filter(x => x._2 == 0) 

いいえ、喜びです。これらの例のそれぞれはList(('Paul Anka', 1))になりますが、リストは空です。

この:予想通り

mylist.filter(x => true) 

作品は、すなわち、それはアイデンティティです。

私はこれに私の髪を裂いています。

更新:

これは興味深いです。上記の例のリストは、scalaから出力されます。 prayaguptaの答えを使用して

、私は

@ val data = List(("Charlie Martin", 99), ("prayagupd", 100), ("PAUL ANKA", 1)) 
data: List[(String, Int)] = List(("Charlie Martin", 99), ("prayagupd", 100), ("PAUL ANKA", 1)) 

@ println(data) 
List((Charlie Martin,99), (prayagupd,100), (PAUL ANKA,1)) 

は私の例では、単一引用符でこれらの文字列(または推定上の文字列)を出力することを確認します。

+1

mylistに設定したときに、そのタイプの注釈を追加しないでください(例: 'mylist:List [Tuple2 [String、Int]] = ...')型を健全にチェックするだけです。 – ameer

+0

http://www.wartremover.org/doc/warts.html#equals – danielnixon

答えて

2

あなたのコードでは、ScalaのREPLで

てみてください、

scala> val data = List(("Charlie Martin", 99), ("prayagupd", 100), ("PAUL ANKA", 1)) 
data: List[(String, Int)] = List((Charlie Martin,99), (prayagupd,100), (PAUL ANKA,1)) 

scala> data.filter{case (name, age) => age == 1 } 
res1: List[(String, Int)] = List((PAUL ANKA,1)) 

別の方法を、正しい見えるがあなたの最初のデータが正しいことを確認し、タイプList[Tuple2[String, Int]]である

scala> data.filter{_._2 == 1 } 
res2: List[(String, Int)] = List((PAUL ANKA,1)) 

ファイルからデータを読み込んだら、おそらくあなたのデータ構造はList[(String, String)]です。"1" == 1が偽の場合、

scala> val data = List(("Charlie Martin", "99"), ("prayagupd", "100"), ("PAUL ANKA", "1")) 
data: List[(String, String)] = List((Charlie Martin,99), (prayagupd,100), (PAUL ANKA,1)) 

scala> data.filter{_._2 == 1 } 
res4: List[(String, String)] = List() 
+1

ビンゴ。私はScalaがこのようなことを表示する異常な方法にだまされていました。私のエントリーは本当に 'Tuple2 [String、String]'でした。 - 私は2番目の要素をIntに変換していると確信していました。文字列には本当に単一引用符が付いていたので、文字列の中に。 –

1

val listOfTuples = List(("PAUL ANKA",0), 
("PAUL ANKA",0), 
("P. ANKA /G. HAMILTON /J. NASH",0), 
("PAUL ANKA",0), 
("PAUL ANKA",0), 
("PAUL ANKA",1), 
("PAUL ANKA",0), 
("PAUL ANKA",0), 
("PAUL ANKA",0), 
("PAUL ANKA",0)) 

println(listOfTuples.filter(_._2 == 1)) 

https://scalafiddle.io/sf/uHxkL8C/0

あなたの実際のデータは、物事を引用単一でないことを確認してください私のためだけで正常に動作します。

関連する問題