【问题标题】:Returning elements of a row in a list using Scala使用Scala返回列表中行的元素
【发布时间】:2013-12-08 09:09:50
【问题描述】:

我需要编写一个方法来返回特定行的内容(它的索引作为方法参数输入)。我必须使用递归并且没有循环。

到目前为止,我已经尝试了这个未完成的代码(我不知道如何继续它):

class Sudoku(val grid: List[List[Int]]) {

   def r(r: Int): Set[Int] = {
   if (grid.isEmpty) Set()
   else 

  }
}

我也不知道 Set 是如何工作的。任何帮助将非常感激。 PS:我不是要完整的代码,有算法解释就够了!

【问题讨论】:

  • 您试图一次解决太多问题。 1) 什么是集合。 2)什么是递归。 3) 域问题。不过,您应该学习如何解决的第一个问题是:如何解决一个复杂的问题?答案是:将其分解为子问题,然后分别解决。
  • 我知道什么是递归...域问题是什么意思?
  • 对不起,我的意思是手头的问题,即“返回特定行的内容”,与编程语言无关。
  • 另一个问题是,这似乎是一个家庭作业。一般来说,如果你能证明你在在这里寻求解决方案之前已经做出了一些努力来解决它,那么你可能会得到更好的答案。这个问题也很不清楚,就像“列表中的一行”是什么意思一样。如果您有一个列表列表,并且我们假设一个网格上下文,我会假设每个内部列表代表网格中的一行。在这种情况下,解决方案只是选择第 n 个列表,但这听起来太简单了,因此这里肯定有一些您没有指定的上下文。

标签: list scala set row


【解决方案1】:

这是对问题字面解释的答案:

class Sudoku(val grid: List[List[Int]]) {
  def row(n: Int): List[Int] =
    if (grid.size > n) grid(n) else Nil
}

List 上的 apply 方法,这里应用于值grid,可以写成grid apply n,也可以简单地写成grid(n),返回列表的第n 个元素。如果该元素不存在(例如 grid(1000000)),则会引发异常,因此我们首先检查列表的大小。

我不知道你为什么要返回一个 Set,但你可以简单地调用 .toSet 来处理结果。 Set 是具有不同元素的集合(每个元素只出现一次),不保证顺序。

我也不知道你为什么需要递归,所以我认为这个问题是一个更大问题的一部分。

【讨论】:

  • Set() 是空 Set,因为 Nil(或 List())是空 List。
  • if (grid.size > n) grid(n).toSet else Set()
  • 这是预期的行为。我不太确定你想要什么。请注意,在 Set 中没有“第一个”元素(因为它是无序的)。
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
相关资源
最近更新 更多