0

Scalaでこれを行う方法を理解しようとしています

私は

List( MyObject(id, name, status), ..., MyObject(id, name, status) )

MyObjects のすべての「id」プロパティを含むリストを取得するために、このコレクションに関数を適用したいと考えています。

List( id1, id2, .., idN)

Ruby の inject メソッドに似たものが欲しいです。

list.inject( [] ){ |lst, el| lst << el }

なにか提案を?

4

2 に答える 2

2

次のように、List の (実際には TraversableLike の) map 関数を使用できますlist.map(_.id)。Scala のコレクション クラスで利用できる、このような便利なメソッドが豊富にあり、学ぶ価値があります。

于 2013-08-15T23:21:22.253 に答える
2

この場合、を使用list.map(_.id)するのが最善の解決策です。明らかに、それを行うには他にも多くの方法があります。大局的に見ると、以下に 2 つの例を示します。

配列への注入

選択した要素を配列に追加します。例:

    > list = [1,2,3]
     => [1,2,3]
    > list.inject([]) { |list,el| list << "Element #{el}"  if (el % 2 == 0); list }
     => ["Element 2"] 

Scala では次のように実装できます。

    > val list = List(1,2,3)
    list: List[Int] = List(1, 2, 3)
    > val map = list.map(x => if (x % 2 == 0) Some(s"Element $x") else None).flatten
    map: List[String] = List(Element 2)

ハッシュへの注入

ハッシュに注入するRubyコードに続いて:

    > list = [1,2,3]
     => [1,2,3]
    > list.inject({}) { |memo,x| memo[x] = "Element #{x}"; memo }
     => {1=>"Element 1", 2=>"Element 2", 3=>"Element 3"} 

次のように Scala で実行できます。

    > val list = List(1,2,3)
    list: List[Int] = List(1, 2, 3)
    > val map = list.map(x => (x -> s"Element $x")).toMap
    map: scala.collection.immutable.Map[Int,String] = Map(1 -> Element 1, 2 -> Element 2, 3 -> Element 3)
于 2013-11-22T16:12:16.923 に答える