【问题标题】:how 2d array filter get value in scala二维数组过滤器如何在scala中获取值
【发布时间】:2013-11-17 02:04:39
【问题描述】:

我有一个二维数组

val A = Array((10.0,1.0,2.0,3.0),(20.0,4.0,5.0,6.0),(10.0,7.2.8.0,9.0))

如何过滤第一个等于10的元素,得到另一个元素的值?

结果如下:

x = Array((1.0,2.0,3.0),(7.2.8.0,9.0))

我可以使用 x(i) 来获取数组中的值

谢谢! :)

【问题讨论】:

    标签: arrays scala filter multidimensional-array


    【解决方案1】:

    你可以这样做:

    A.filter(_._1 == 10).map{case (a,b,c,d)=>(b,c,d)}
    

    或者像这样:

    for ((a,b,c,d) <- A if a == 10) yield (b,c,d)
    

    (顺便说一句,建议您不要在 Scala 中使用数组,除非您确实需要;您应该更喜欢不可变集合,例如 Seq 和 Vector。Scala 集合有一个(有些旧的)介绍here。 )

    【讨论】:

    • 如果我使用第一种方式,我该如何使用值 b,c,d ?比如: val x = A.filter(_._1 == 10).map{case (a,b,c,d)=>(b,c,d)} 和 x(0) 可以得到 (Double, Double , Double) = (1.0,2.0,3.0) 但如果我想获得唯一的值 "1.0" ,我该怎么办?我是scala的初学者,很多概念都不清楚。谢谢你的详细回复:)
    • 您可以使用语法(1.0,2.0,3.0)._1 来获取元组的第一个元素(在本例中为1.0)。同样,tuple._2 获取第二个元素,依此类推。对于您的示例,x(0)._1 将返回 1.0。
    【解决方案2】:
    scala> A.filter(_._1 == 10.0).map(t => t.productIterator.toList.tail)
    res0: Array[List[Any]] = Array(List(1.0, 2.0, 3.0), List(7.2, 8.0, 9.0))
    

    【讨论】:

      猜你喜欢
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      相关资源
      最近更新 更多