【问题标题】:how to put an arbitrary big tuple in pattern matching with case?如何将任意大元组放入与大小写匹配的模式中?
【发布时间】:2015-09-21 11:33:39
【问题描述】:

我今天在 stackoverflow 上发布了一些问题,但我正在处理的问题需要比预期更复杂的代码。

我有这个代码:

val nsc1= Stream.iterate((1,0,1,1))({case (a,b,c,d) => (b,c,d,b+c)}) map (c=> c._1)

这里流的初始值是一个 Tuple4,但我需要管理它的任意大小。 问题实际上不是初始参数,而是元组中包含值列表的“案例”。你知道实现它的方法吗?

我也会在网络上搜索“模式匹配”,如果找到答案,请放在这里。

感谢您的帮助!

奥利弗

【问题讨论】:

  • List 而不是 Tuple 呢?
  • 是的,你们都是对的,我意识到正确的方法是使用例如数组。但无论如何,我喜欢给出可用于处理元组的方法的答案。谢谢

标签: scala stream


【解决方案1】:

使用List 或其他类型的集合肯定会更容易,但如果您真的 被各种长度的元组困住,那么我认为您将不得不放弃模式匹配。

相反,您可能必须传递元组 t =>,然后使用 t.productArityt.productElement() 和/或 t.productIterator 来检查元组并构建相同配置文件的返回元组。

【讨论】:

    【解决方案2】:

    您可以有任意长度匹配List。不确定您要做什么,但这是一种方法:

    Stream.iterate( List(1,0,1,1) ){ 
        case List(a,b,c,d) => List(b,c,d,b+c)
        case List(a,b,c) => List(a)
        case List(a,b) => List(a)
        case List(a) => List(a)
    } map(_(0))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2021-07-29
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      相关资源
      最近更新 更多