【问题标题】:How to find record from an array of two dimensional array in rails 3?如何从rails 3中的二维数组数组中查找记录?
【发布时间】:2011-08-16 07:42:52
【问题描述】:

我正在开发 Rails 3.0。我有一个二维数组。二维数组由用户数据和一个布尔值组成。

例如:[ [user1,true], [user2,true], [user3,false] ]

看起来像这样:

[
    [#<User id: 1, email: "abc@abc.com", username: "abc">, true],
    [#<User id: 2, email: "ijk@ijk.com", username: "ijk">, true],
    [#<User id: 3, email: "xyz@xyz.com", username: "xyz">, false],
]

我想有条件地查找/提取记录;假设找到User id=2 的整行,它应该只返回第二行,即[#&lt;User id: 2, email: "ijk@ijk.com", username: "ijk"&gt;, true]

有没有循环遍历这样的数组?如何实现?

【问题讨论】:

  • 这是一个简单的循环;你试过什么了?顺便说一句,您是否只想使用内存数组执行此操作,还是您的目标是提高效率并仅从数据库中加载该记录?
  • 它应该只有效地获取一条记录。我正在检查以下解决方案...

标签: ruby ruby-on-rails-3 multidimensional-array


【解决方案1】:
my_array.select{ |user, flag| user.id == 2}

所有带有 true 标志的用户:

my_array.select{ |user, flag| flag }

或假:

my_array.select{ |user, flag| !flag }

【讨论】:

  • 我是新手,但令人惊讶的是,当我尝试第一个命令 @m.select{ |user, flag| user.id == 2} 时,它返回了所有三个记录。因此,我使用了detect 而不是select,它起作用了。其他两个命令@m.select{ |user, flag| flag }@m.select{ |user, flag| !flag } 运行良好。谢谢...
  • 看起来你尝试了@m.select{ |user, flag| user.id = 2} 或者他们的ID=2
【解决方案2】:

你可以这样做

[ [user1,true], [user2,true], [user3,false] ].select { |u| u.first.id == 2}

这将只返回用户 id 等于 2 的记录。

【讨论】:

  • @m.select{ |u| u.first.id == 2 } 返回所有记录。但是当我将其更改为@m.detect{ |u| u.first.id == 2 } 时,它只返回了一条记录。我是新手。你能告诉我为什么会这样吗?
【解决方案3】:

与@eugen 的答案相同,只是语法不同(并且使用检测返回一维数组而不是二维数组):

[ [user1,true], [user2,true], [user3,false] ].detect { |user, boolean| user.id == 2 }
=> [user2, true]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    相关资源
    最近更新 更多