首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Coursera周3过滤方法不起作用

Coursera周3过滤方法不起作用
EN

Stack Overflow用户
提问于 2017-06-07 18:32:02
回答 1查看 1.2K关注 0票数 0

我正在修coursera课程,做第三周的作业。我已经完成了一半的功能。被过滤方法卡住了。我不想要答案,我想要的是理解或暗示我错过了什么。

以下是要求:

/** *此方法接受一个谓词,并返回谓词为真的原始集合中所有元素的子集。*/

代码语言:javascript
复制
def filter(p: Tweet => Boolean): TweetSet = ???

这是我的代码:

代码语言:javascript
复制
override def filter(p: Tweet => Boolean): TweetSet =  filterAcc(p, new Empty)

 def filterAcc(p: Tweet => Boolean, acc: TweetSet): TweetSet = {
  if(this.isEmpty)
    acc
  else if (p ( elem)) {
    left.filterAcc(p, acc incl elem)
    right.filterAcc(p, acc incl elem)
  }
  else
  {
    left.filterAcc(p, acc )
    right.filterAcc(p, acc )
  }

更新:为这个问题添加更多的上下文。下面是基类:

代码语言:javascript
复制
abstract class TweetSet {

def filter(p: Tweet => Boolean): TweetSet = ???

def filterAcc(p: Tweet => Boolean, acc: TweetSet): TweetSet

def union(that: TweetSet): TweetSet = ???

def isEmpty: Boolean = ???

def incl(tweet: Tweet): TweetSet

def contains(tweet: Tweet): Boolean

}

我有两个实现--空的和NonEmpty,分别表示有和没有任何元素的集合。

测试用例:

代码语言:javascript
复制
val set1 = new Empty
val set2 = set1.incl(new Tweet("a", "a body", 20))
val set3 = set2.incl(new Tweet("b", "b body", 20))
val c = new Tweet("c", "c body", 7)
val d = new Tweet("d", "d body", 9)
val set4c = set3.incl(c)
val set4d = set3.incl(d)
val set5 = set4c.incl(d)  

test("filter: a on set5") {
 new TestSets {
 assert(size(set5.filter(tw => tw.user == "a")) === 1) // this fails
 }
}

结果:

信息过滤:a on set5 * 信息0不等于1 (TweetSetSuite.scala:64)

EN

回答 1

Stack Overflow用户

发布于 2017-06-07 21:58:41

代码语言:javascript
复制
 def filterAcc(p: Tweet => Boolean, acc: TweetSet): TweetSet = {
    val set = if(p(elem)) acc.incl(elem) else acc
    right.filterAcc(p, left.filterAcc(p, set))
  }

基本上,你需要记住,你必须过滤3‘集:埃莱姆,左,右,然后组合它们(加入)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44420288

复制
相关文章

相似问题

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