【问题标题】:Arrays of Hashes哈希数组
【发布时间】:2021-11-21 16:22:26
【问题描述】:

我在下周直播课程开始前的最后一周准备工作,我被这个问题挂断了,我希望有人能告诉我哪里出错了。

这是他们希望我们做的: 创建一个名为 great_movies 的新哈希数组,其中仅包含评分大于 3 的电影,并且每个哈希仅包含标题和 boxart 信息。该程序应以:p great_movies 结尾。

这是给我们的代码:

    movies = [
      {
        "id" => 70111470,
        "title" => "Die Hard",
        "boxart" => "http://cdn-0.nflximg.com/images/2891/DieHard.jpg",
        "uri" => "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating" => 5.0,
        "bookmark" => []
      },
      {
        "id" => 654356453,
        "title" => "Bad Boys",
        "boxart" => "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg",
        "uri" => "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating" => 2.0,
        "bookmark" => [{ "id" => 432534, "time" => 65876586 }]
      },
      {
        "id" => 65432445,
        "title" => "The Chamber",
        "boxart" => "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg",
        "uri" => "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating" => 4.0,
        "bookmark" => []
      },
      {
        "id" => 675465,
        "title" => "Fracture",
        "boxart" => "http://cdn-0.nflximg.com/images/2891/Fracture.jpg",
        "uri" => "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating" => 3.0,
        "bookmark" => [{ "id" => 432534, "time" => 65876586 }]
      }
    ]

这是我到目前为止想出的,但我认为我的做法不正确? 类电影

  def initialize(id, title, boxart, url, rating, bookmark)
    @id = id
    @title = title
    @boxart = boxart
    @url = url
    @rating = rating
    @bookmark = bookmark
  end

  def id
    @id
  end

  def title
    @title
  end

  def boxart
    @boxart
  end

  def url
    @url
  end

  def rating
    @rating
  end

  def bookmark
    @bookmark
  end
end

然后我按照他们向我们展示的方式输入了所有信息,但由于某种原因,它不允许我在这里发布,我只是做了四个不同的 Movies.new 实例并将所有信息放入其中。

任何为我指明正确方向的帮助将不胜感激,就像旁注一样,我们最近刚刚了解了整个类方法的事情,这就是我尝试这样做的原因,因为至少在我看来这是最最近他们向我们展示了我正在尝试使用的东西。

【问题讨论】:

  • 你显示了一个类定义,但你没有显示这个类的任何用法。另外,我不清楚为什么你要创建这个类。您是否正在考虑从更大的角度练习数据建模?在这种情况下,该类可能有意义,您首先将散列数组转换为 Movies 对象数组,然后向该类添加一个方法,即 great_movie?

标签: arrays ruby hash


【解决方案1】:

我认为创建一个全新的类有点过头了。您只需要了解数组已有的方法即可。

我不会为您提供直接的解决方案,因为这是家庭作业,SO 不是来为您做作业的。但是让我们考虑一个数组:

foo = [1, 4, 8, 2, 3, 5]

通过使用select 方法并给它一个适当的块,我可以获得大于3 的值。

greater_than_3 = foo.select { |x| x > 3 }

现在greater_than_3[4, 8, 5]

如果我想要一个包含每个值的数组,然后乘以 2,该怎么办?我可以使用map 方法和另一个块。

greater_than_3 = foo.select { |x| x > 3 }
times_two = greater_than_3.map { |x| x * 2 }

现在times_two[8, 16, 10]

由于这是家庭作业,我会让你看看如何应用这些方法来解决你的问题,而不是直接给你答案,你可以复制和粘贴。

Array 类提供这些方法的 Ruby Enumerable mixin 的文档应该对您有所帮助。

【讨论】:

  • 好的,谢谢,我有点以为我在设置该课程时走错了方向,但我想不出任何其他方法我将应用您在评论中提出的内容看看那能不能把我带到我需要去的地方。
  • 如果您对select 有多个标准,例如x > 3x,您的答案将更接近问题。请注意,Ruby 3.0 提供了一种结合selectmap 的方法:Enumerable#filter_map(尽管map 与问题无关)。
  • 鉴于提供的数据,我将问题解释为要求选择评分高于 3 的电影,然后只提供它们的标题和 boxart 信息。就目前而言,以您的方式解释它不会产生任何结果。不过,我可以看到任务有点模棱两可。
  • 祝你好运,@Philip Jobe。我希望答案有所帮助。
  • @Chris,是的,我误读了这个问题。 Philip,要将哈希限制为仅某些键,请参阅Hash#slice
猜你喜欢
  • 2012-10-29
  • 2021-02-05
  • 2019-10-27
  • 2017-05-11
  • 2019-05-23
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多