Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释Ruby方法中三元运算符的情况_Ruby - Fatal编程技术网

解释Ruby方法中三元运算符的情况

解释Ruby方法中三元运算符的情况,ruby,Ruby,我有一个方法,是为我的目的,唯一的事情是,我真的不知道发生了什么,可以用外行的术语解释。特别是最后一行: hash.map{ |k,v| v==max[1] ? k : nil }.compact.sort_by(&:length).first 这是我的代码: def self.largest_hash_key(hash) max = hash.max_by{ |k,v| v } seven = hash.max_by{ |k,v| k.length }.first

我有一个方法,是为我的目的,唯一的事情是,我真的不知道发生了什么,可以用外行的术语解释。特别是最后一行:

hash.map{ |k,v| v==max[1] ? k : nil }.compact.sort_by(&:length).first
这是我的代码:

 def self.largest_hash_key(hash)
    max = hash.max_by{ |k,v| v }
    seven = hash.max_by{ |k,v| k.length }.first
    if seven.length == 7
     seven
    else
     hash.map{ |k,v| v==max[1] ? k : nil }.compact.sort_by(&:length).first
    end
  end

map
根据传入的值返回投影。在这种情况下,它返回一个由散列键或
nil
组成的数组(对于每个键/值对),具体取决于值是否匹配
max[1]

[1, 2, 3].map{|a| a.odd? ? a : nil}
=> [1, nil, 3]
在这种情况下,
散列
仅转换为值与
max[1]
匹配的键(nil被
压缩
去掉),然后按其长度排序,并返回第一个(最小长度)

这个算法可以有相当大的改进,但这就是所讨论的行的工作原理

 hash.map{ |k,v| v==max[1] ? k : nil }.compact.sort_by(&:length).first
指:

For the hash passed in
For each key-value pair (that's the `.map`)
See if the value matches the maxiumum value that was found in the hash 
    by the `hash.max_by{ |k,v| v }` expression

If so, use the that key value, otherwise use nil (ignore it)
Take that result and `compact` it make it be the actual result (remove those nil elements).
Sort by length # Not sure if this is needed?
Return the key-value pair as an array rather than the hash passed in.

您的输入和预期输出是什么?我们可能会给你提供更好的解决方案。使用
seven
作为变量名让我恶心。方法名
最大散列值\u key
如果始终返回除最大散列值以外的任何值,它也会这样做。至少它没有像
SEVEN=49
那样设置为常量。