【问题标题】:Scala: find if there is Some element in a specific position in a listScala:查找列表中特定位置是否存在某些元素
【发布时间】:2020-08-21 13:11:47
【问题描述】:

我有一个不同元素的列表,其中一个元素是类型选项。如何确定该位置是否有元素?我已经尝试将它包装在 Some() 函数中,但是,这不会让我知道是否有 None。

我有一个 cookie 订单的 csv 文件。我已正确拆分每一行(每个订单),创建了一个名为 Order 的案例类,但列表中的第三个条目包含可选的附加注释。我需要知道它是空的(无),还是一些并显示注释;格式为 some("whatever the order is") 或 None。

csv 文件中的每个条目都作为字符串输入到此函数中, def process(string entry): Order,我把它做成 val 行,用 .split(,) 方法拆分,放入一个列表中。

val line = entry.split(",").toList

列表仍然是字符串。 Order的参数是string, string, Some[string]。

这是我尝试过的,但它没有显示 None。

val cookieOrder = Order(line(0), line(1), Some(line(2))

如果第三个元素没有,我对 Order 的预期结果是

"some string", "some string", None

分割前一行的例子是

"""牛奶,伦敦,"""

谢谢

【问题讨论】:

  • 什么是line?你能给我举个例子吗? - 在任何情况下,如果 line 是一个 List[Any],那么它就是代码异味。
  • line 是我的 csv 文件中的一行/条目。这是一个订单。以字符串形式输入(在参数中),但拆分为字符串、字符串、Option[string]
  • 你是怎么拆分的?你是怎么把第三个元素变成一个Option的,最后如果它已经是一个选项为什么你需要把它转换成一个选项?
  • 我实际上并没有将其拆分为选项,我只是将其拆分为字符串列表。我用 val line = entry.split(",").toList ; entry 是我用作参数的字符串。它是在创建 csv 文件时作为可选字段提供的,所以我想看看该字段中是否有任何内容。我的 Order 目标是字符串、字符串、选项
  • 好的,请用所有这些细节和说明编辑您的问题,并将示例输入与预期输出放在一起。

标签: list scala options


【解决方案1】:

所以假设这条线看起来像这样:

val str = "milk,London, " // Note the trailing white space.

那么你可以这样做:

val line = str.trim.split(',')
// line: Array[String] = Array(milk, London)

val opt = line.lift(2)
// opt: Option[String] = None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2013-11-21
    • 2020-06-11
    • 1970-01-01
    相关资源
    最近更新 更多