我有一个2D数组,我需要使用sort_by对这些数组中的值进行排序! (例如,当数组的第二个值为nil时,它属于第一组)
每种方法都可以做到这一点,但是我需要一个更漂亮/可读的代码。
到目前为止我所拥有的: arry pattern:[[164,nil,6],[163,nil,6],[162,nil,6],[161,nil,7],[160,“ FSDL”,6]]
floor(n/2)
我想做这样的事情:
matches.sort_by! {|匹配| (match.second == nil && match.last == 6)(second_condition)(third_condition)(fourth_condition)}
答案 0 :(得分:0)
我用零?而不是空白?如果您想使用空白?现在?根据您的要求。可以按照以下步骤进行排序
matches.sort_by do |match|
if(match[1].nil? && match.last == 6)
"1 #{match.first}"
elsif(not match[1].nil? && match.last == 6)
"2 #{match.first}"
elsif(match.last == 4)
"3 #{match.first}"
elsif(match.last == 7)
"4 #{match.first}"
else
"5 #{match.first}"
end
end
使用上面的代码,如果条件不匹配,将附加到最后
对于给定的样本,它将产生以下输出
[[162, nil, 6], [163, nil, 6], [164, nil, 6], [160, "FSDL", 6], [161, nil, 7]]
答案 1 :(得分:0)
不能完全清除预期的输出,但是如果返回预期的输出,我将添加一个解释。
matches = [[164, nil, 6], [163, nil, 6], [162, nil, 6], [161, nil, 7], [160, "FSDL", 6] ]
matches.group_by(&:last).tap { |h| h[6] = h[6].group_by { |e| e[1].nil? } }
.tap { |h| h.default = [] }
.then { |h| h[6][true] + h[6][false] + h[4] + h[7] }
.map(&:first)
#=> [164, 163, 162, 160, 161]