0

繰り返しますが、私は Scala とキーと値のペアのアイデアに行き詰まっています。繰り返しますが、何らかの方法で Option を使用したいと考えています。今回は、キーに基づいてペアを削除する方法と、そのキーの最初のインスタンスのみ (すべてではありません) に行き詰まっています。filterandを使用しようとしましfilterNotたが、同じキーを共有するすべてのペアが削除されます。Listまた、これを半単純に保つためにa だけで実装しようとしています

4

3 に答える 3

0

Seq には、findまさにあなたが求めていることを行うというメソッドがあります。

def find(p: (A) ⇒ Boolean): オプション[A]

もしあれば、述語を満たすシーケンスの最初の要素を見つけます。

注: 無限サイズのコレクションでは終了しない場合があります。

    p 要素のテストに使用される述語。

    の最初の要素を含むオプション値を返します
                p を満たすシーケンス、または存在しない場合は None。

使用法:

val list = List(("A",1),("B",2),("C",3))

def remove(key:String): Option[Int] = list.find(_._1 == key)

remove("B")
// Some((B,2))

remove("D")
// None
于 2013-09-25T01:25:37.610 に答える
0
val list = List(1 -> 'a, 2 -> 'b, 2 -> 'c)

val removal = list find (_._1 == 2)
  // Option[(Int, Symbol)] = Some((2,'b))
val newList = list diff removal.toList
  // List[(Int, Symbol)] = List((1,'a), (2,'c))

diffは、引数リストで見つかった各要素の最初のインスタンスのみを削除します。すべてを削除するわけではありませんfilter

于 2013-09-25T01:26:31.347 に答える
0

あなたが何を求めているかを伝えるのは難しいです。書き込もうとしている関数のシグネチャを書き出すと役立ちます。

もしかして、こういうこと?

def remove[A, B](seq: Seq[(A, B)], key: A): Seq[(A, B)] = 
  seq.indexWhere(_._1 == key) match { 
    case -1 => seq
    case n => seq.patch(n, Nil, 1)
  }

remove(Seq((1,2), (2,3), (3,4), (2,5)), 2)
// List((1,2), (3,4), (2,5))

remove(Seq((1,2), (2,3), (3,4), (2,5)), 6)
// List((1,2), (2,3), (3,4), (2,5))
于 2013-09-25T01:01:39.397 に答える