首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用元组从递归函数中提取数据

使用元组从递归函数中提取数据
EN

Stack Overflow用户
提问于 2018-09-23 21:29:06
回答 1查看 114关注 0票数 0

我有一个Scala函数,它在整个生命周期中执行2-3次递归调用。我想将变量保存在列表中的第二个元组中。有没有一种聪明的方法可以做到这一点?

仅仅传递变量就意味着我将拥有一个ListString,而实际上我想要的是一个List[ListString]。

函数内部是否需要一个随每次迭代而更新的变量?

代码语言:javascript
复制
def someRecursiveFunction(listOfWords:List[String])List[List[String]] = {
   val textSplitter = listOfWords.lastIndexOf("Some Word")
   if (Some Word != -1) {
     val someTuple = listofWords.splitAt(textSplitter)
     val valueIwant = someTuple._2
     someRecursiveFunction(someTuple._1)
   }
 List(someTuple._2,someTuple._2(1),someTuple._2(2)) // What I want back
}

有没有办法从递归函数中提取出第二个元组,以便我可以在程序中进一步使用它?

EN

回答 1

Stack Overflow用户

发布于 2018-09-26 01:42:39

如果返回类型固定为List[List[String]],则需要对代码进行以下更改:

  1. 因为someType._2是作为someType._2(2)访问的,所以someType._2列表中至少应该有3字符串。
  2. 最后一个表达式必须是返回类型ie,List[List[String]]。因为someType._2(1)someType._2(2)只是字符串而不是List[String]List(someTuple._2,List(someTuple._2(1),someTuple._2(2)))将是返回类型,值"Some Word“将在递归过程中改变,注意到someTuple._2.size总是>=3.
  3. As我们需要访问someType._2,它将在每次递归过程中改变,它在递归函数中被声明为var

有了从您的需求中得出的理解,下面的代码可能就是您正在寻找的代码:

def someRecursiveFunction(listOfWords:ListString,sw: String):List[ListString] ={ val textSplitter = listOfWords.lastIndexOf(sw) var i =0 if(i==0) { var someTuple:(ListString,ListString) = (List(),List()) } if (textSplitter != -1 && listOfWords.size-3>=textSplitter) { someTuple = listOfWords.splitAt(textSplitter) println(someTuple._1,someTuple._2) //用于检查递归if( someTuple._1.size>=3){ i+=1 someRecursiveFunction(someTuple._1,someTuple._1(textSplitter-3))} } List(someTuple._2,List(someTuple._2(1),someTuple._2(2) // What I want back }

Scala中的

代码语言:javascript
复制
val list = List("a","b","c","x","y","z","k","j","g","Some Word","d","e","f","u","m","p")


scala> val list = List("a","b","c","x","y","z","k","j","g","Some Word","d","e","f","u","m","p")
list: List[String] = List(a, b, c, x, y, z, k, j, g, Some Word, d, e, f, u, m, p)

scala> someRecursiveFunction(list,"d")
(List(a, b, c, x, y, z, k, j, g, Some Word),List(d, e, f, u, m, p))
(List(a, b, c, x, y, z, k),List(j, g, Some Word))
(List(a, b, c, x),List(y, z, k))
(List(a),List(b, c, x))
res70: List[List[String]] = List(List(b, c, x), List(c, x))

scala> someRecursiveFunction(list,"Some Word")
(List(a, b, c, x, y, z, k, j, g),List(Some Word, d, e, f, u, m, p))
(List(a, b, c, x, y, z),List(k, j, g))
(List(a, b, c),List(x, y, z))
(List(),List(a, b, c))
res71: List[List[String]] = List(List(a, b, c), List(b, c))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52466576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档