Ruby on rails 如何找到具有假值的键?

Ruby on rails 如何找到具有假值的键?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有这个阵列: @import = [{"User"=>[9], "Project"=>false, "Task"=>false, "Date"=>"2017-08-11", "Time (Hours)"=>2.0, "Comment"=>"Test 11"}, 1] 如何在上述数组中找到具有假值的键?假设数组的结构始终相同,可以执行以下操作: @import.first.keys.select { |key| @import.first[key] == f

我有这个阵列:

@import = [{"User"=>[9], "Project"=>false, "Task"=>false, "Date"=>"2017-08-11", "Time (Hours)"=>2.0, "Comment"=>"Test 11"}, 1]

如何在上述数组中找到具有假值的键?

假设数组的结构始终相同,可以执行以下操作:

@import.first.keys.select { |key| @import.first[key] == false }
#=> ["Project", "Task"]

假设阵列的结构始终相同,可以执行以下操作:

@import.first.keys.select { |key| @import.first[key] == false }
#=> ["Project", "Task"]
您可以使用
散列#选择

hash = {"User"=>[9], "Project"=>false, "Task"=>false, "Date"=>"2017-08-11", "Time (Hours)"=>2.0, "Comment"=>"Test 11"}
hash.select { |k,v| v == false }
# => {"Project"=>false, "Task"=>false}
其他有用的散列方法:

您可以使用
散列#选择

hash = {"User"=>[9], "Project"=>false, "Task"=>false, "Date"=>"2017-08-11", "Time (Hours)"=>2.0, "Comment"=>"Test 11"}
hash.select { |k,v| v == false }
# => {"Project"=>false, "Task"=>false}

其他有用的散列方法:

您可以将
每个\u与\u对象一起使用

@import.first.each_with_object([]) do |(key, value), accu|
  accu << key if value == false
end

您可以将
每个\u与\u对象一起使用

@import.first.each_with_object([]) do |(key, value), accu|
  accu << key if value == false
end


数组结构是否总是相同的(第一个元素是散列,其他元素不需要测试)?是的,数组结构将是这样或这样的@import\u响应是[{:user\u id=>9,:timesheet\u project\u id=>4,:timesheet\u task\u id=>87,:date=>2017-08-13,:time\u-speed=>2.0,:comment=>Test 13},{:user\u id=>9,:timesheet\u project\u id=>4,:timesheet\u task\u id=>87,:date=>2017-08-13,:time\u-speed=>2.0,:comment=>Test 13},{:user\u-id=>9,:timesheet\u-project\u-id=>4,:timesheet\u-task\u-id=>87,:date=>2017-08-13,:time\u-speed=>2.0,:comment=>Test 13,{:user\u-id=>9,:timesheet\u-id=>2017-08-13,{:u-id=>,:time_-speed=>2.0,:comment=>test13}]@Archie123所以用“yes”你的意思是它并不总是这样吗?你的第二个数组看起来完全不同。是的,它并不总是这样。它将包含需要插入的条目的散列,或与第一种情况相同的带有错误行号的单个散列。数组结构总是相同的吗(第一个元素是散列,其他元素不需要测试)?是的,数组结构是这样的@import\u响应是[{:user\u id=>9,:timesheet\u project\u id=>4,:timesheet\u task\u id=>87,:date=>2017-08-13,:time\u-speed=>2.0,:comment=>Test 13},{:user\u id=>9,:timesheet\u project\u id=>4,:timesheet\u task\u id=>87,:date=>2017-08-13,:time\u-speed=>2.0,:comment=>Test 13},{:user\u-id=>9,:timesheet\u-project\u-id=>4,:timesheet\u-task\u-id=>87,:date=>2017-08-13,:time\u-speed=>2.0,:comment=>Test 13,{:user\u-id=>9,:timesheet\u-id=>2017-08-13,{:u-id=>,:time_-speed=>2.0,:comment=>test13}]@Archie123所以用“yes”你的意思是它并不总是这样吗?你的第二个数组看起来完全不同。是的,它并不总是这样。它将包含需要插入的项的散列,或者像第一种情况一样包含带有错误行号的单个散列。这将作为一个散列的结果,而不是“具有假值的键”@marzapower您可以在最后添加
.keys
来获取它们,即:
hash.select{k,v | v==false}.keys
。此外,由于
k
没有被使用,它可以被
替换(即
哈希。选择{u124;,v | v==false}
)。是的,我知道,但答案最好是“正确的”@marzapower Stackoverflow社区在这里帮助你找到解决问题的方法,而不是为你解决问题。“给一个人一条鱼,你会喂他一天。教他如何钓鱼,你会喂他一辈子”。这样做的结果是散列,而不是“有错误价值的钥匙”@marzapower您可以在最后添加
.keys
来获取它们,即:
hash.select{k,v | v==false}.keys
。此外,由于
k
没有被使用,它可以被
替换(即
哈希。选择{u124;,v | v==false}
)。是的,我知道,但答案最好是“正确的”“@marzapower Stackoverflow社区在这里帮助你找到解决问题的方法,而不是为你解决问题。“给一个人一条鱼,你会喂他一天。教他如何钓鱼,你会喂他一辈子。”@Gerry修复了
命名错误
。是的,第二种变体与@MrYoshiji几乎相同(除了你在评论中提到的
)是的,我注意到了,所以我删除了我的评论:)@gery修复了
命名错误
。是的,第二个变体与@MrYoshiji几乎相同(除了你在评论中提到的
),是的,我注意到了,所以我删除了我的评论:)