【问题标题】:Ruby array equivalent of active record.where(criteria)Ruby 数组等价于 active record.where(criteria)
【发布时间】:2011-11-01 23:27:57
【问题描述】:

这可能是一段很长的时间,但如果它存在的话,会让生活变得更轻松。

无论如何,情况就是这样。我有一个哈希数组,其中一个键的值是另一个哈希........是的,我知道。

这是一个更好的解释:

@myArrayOfStuff[0]
@myArrayOfStuff[0]["single-key"]
@myArrayOfStuff[0]["single-key"]["object-identifier"]

第一个返回一个哈希。 第二个将返回一个对象(在我的情况下称为 page 但示例使用不同的名称) 第三个返回我作为对象标识符引用的任何变量。

足够简单。

我想做的是选择另一个数组,其中对象标识符的值不为零或大于 x。类似于 activerecord.where 方法的东西。

@x = @myArrayOfStuff.where(["single-key"]["object-identifier"]) > 3orwhatever

显然这不起作用,因为语法很糟糕。但是还有另一种方法吗?另一种尝试的方法可能是按此变量对数组进行排序。像

@x = @myArrayOfStuff.sort {|x,y| y <=> x } 

但是我真的不明白 ruby​​ 的排序方法发生了什么。 有人可以帮忙吗?

【问题讨论】:

标签: ruby-on-rails ruby arrays sorting activerecord


【解决方案1】:

您可以使用select 方法。

@x = @my_array_of_stuff.select {|v| v["single-key"]["object-identifier"] > 3}

【讨论】:

  • 太棒了!我明白那里的一切
【解决方案2】:
collection = [
  {a:1, b:2, c:3},
  {a:2, b:3, c:4}
]
where = {a:1}
collection.select{|item|
  where.map{|k,v|
    item[k] == v ? true : nil
  }.compact.length == where.length
}

【讨论】:

  • 虽然不禁止仅使用代码的答案,但请理解这是一个问答社区,而不是众包社区,并且通常,如果 OP 理解作为答案发布的代码,他/她会自己想出一个类似的解决方案,并且不会一开始就发布问题。同样的原则也适用于任何可能不熟悉所呈现代码的未来读者。因此,请通过解释如何和/或为什么起作用,为您的答案和/或代码提供上下文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 2019-08-15
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
相关资源
最近更新 更多