3

次のようなクラスがあるとしましょう。

case class Person(
name:String,
age:Int,
dependents:List[Person]
)

次の4人がいるとしましょう。

val p1 = Person("Tom",50,List(p2,p4))
val p2 = Person("Bob",20,List(p3))
val p3 = Person("Jimmy",25,List(p4))
val p4 = Person("Harry",11,Nil)

私の人物リストは val pList = List(p1,p2,p3,p4) です

このコレクションをフィルタリングして、11 歳の扶養家族を持つすべての人を取得したいと考えています。

それを行う1つの方法は何ですか?

アルゴリズムは次のように要約できます。pList 内の各 person(p) の各dependent(d) について、dependent(d) の年齢が == 11 の場合、person(p) を収集します。

それをscalaで表現するにはどうすればいいですか?

4

2 に答える 2

9

人のリストを取得し、フィルター メソッドを使用して、各扶養家族に年齢が 11 歳の人が含まれているかどうかを確認します。

pList.filter(_.dependents.exists(_.age == 11))

これは明らかに 1 層の深さのみをチェックするため、この例ではTomandが返されます。これは、 11 歳の直接の依存関係があるJimmyのはこれらだけであるためです。Persons

Person(
  Tom,
  50,
  List(Person(Bob,20,List(Person(Jimmy,25,List(Person(Harry,11,List()))))), Person(Harry,11,List()))
  )
Person(
  Jimmy,
  25,
  List(Person(Harry,11,List()))
  )

または、次のようにもう少し一般的にすることもできます。

def dependentAged(age: Int)(person: Person) = person.dependents.exists(_.age == age)
val filtered = pList.filter(dependentAged(11))
于 2012-11-28T05:43:08.327 に答える