【问题标题】:Scala - how to get a list elementScala - 如何获取列表元素
【发布时间】:2011-01-25 12:06:52
【问题描述】:

我正在尝试从列表中获取元素:

data =List(("2001",13.1),("2009",3.1),("2004",24.0),("2011",1.11))

有什么帮助吗?任务是分别打印字符串和数字,例如:

print(x._1+" "+x._2) 

但这不起作用。

【问题讨论】:

  • 这不是家庭作业,我从上学期的考试中为自己做的。好吧,但也许在某种程度上你可以把它理解为家庭作业。

标签: list scala printing


【解决方案1】:

函数式编程的一个好的做法是尽可能多地对不可变对象进行无副作用的转换。

这意味着(在这种情况下)您可以将元组列表转换为字符串列表,然后在最后将您的副作用(println)限制为一个步骤。

val data = List(("2001",13.1),("2009",3.1),("2004",24.0),("2011",1.11))
val lines = data map { case(a,b) => a + " " + b.toString }
println(lines mkString "\n") 

【讨论】:

    【解决方案2】:
    scala> val data =List(("2001",13.1),("2009",3.1),("2004",24.0),("2011",1.11))
    data: List[(java.lang.String, Double)] = List((2001,13.1), (2009,3.1), (2004,24.0), (2011,1.11))
    
    scala> data.foreach(x => println(x._1+" "+x._2))
    2001 13.1
    2009 3.1
    2004 24.0
    2011 1.11
    

    【讨论】:

    • 上帝啊,请原谅我忘记了 foreach ...谢谢您的帮助!
    【解决方案3】:
    val list = List(("2001",13.1),("2009",3.1),("2004",24.0),("2011",1.11))
    println(list map (_.productIterator mkString " ") mkString "\n")
    
    2001 13.1
    2009 3.1
    2004 24.0
    2011 1.11
    

    【讨论】:

    • 喜欢 productIterator,11/10 的可扩展性点赞 :)
    • 但问题是为什么 Product 本身没有 mkString?
    • 我有很多这样的问题,Landei。也许有一天我会列出一份清单并将它们发送到一些 Scala 邮件列表。另外,为什么 mkString 不被称为 join 这似乎是一种标准?
    • 曾几何时,邮件列表上有一个关于mkString 的长时间讨论,有很多不同的名称建议。由于没有明确的最爱,兼容卡胜出。
    【解决方案4】:

    我会使用模式匹配,它产生的编程模式可以更好地适应更大的元组和更复杂的元素:

    data.foreach { case (b,c) => println(b + " " + c) }

    【讨论】:

      【解决方案5】:

      对于字符串,使用

      List((1,"aoeu")).foreach(((_:Tuple2[String,_])._1) andThen print)
      对于数字,请使用
      List(("aoeu",13.0)).foreach(((_:Tuple2[_,Double])._2) andThen print)

      【讨论】:

      • ((_:Tuple2[String,_])._1) andThen print 最好写成x => print(x._1),甚至case (a,b) => print a。请让类型推断器为您完成所有工作,这不是 Java!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 2020-09-11
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多