相当于Python的min()和Ruby中的lambda

时间:2013-12-05 14:26:12

标签: python ruby

在Ruby中,下面的Python代码相当于什么?

x = [6, 7, 8, 9, 10, 2, 3, 4]
y = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

min(range(len(x)), key=lambda i: y.index(x[i]))
=> 5

编辑:我只是在寻找从Python到Ruby的直接翻译,不要理会所提供示例的语义。

2 个答案:

答案 0 :(得分:2)

您想获得最小元素的索引吗?

x = [6, 7, 8, 9, 10, 2, 3, 4]

x.index(x.min()) # => 5
x.each_with_index.min[1] # => 5
(0...x.size).min_by {|i| x[i] } # => 5

答案 1 :(得分:1)

直接翻译......

(0...x.length).min_by { |i| y.find_index(x[i]) }

在python中使用lambdas的内置函数倾向于转换为带有块的Ruby方法(lambda基本上是在线定义的)。

编辑:稍微更惯用的翻译可能是

obj,index = x.each_with_index.min_by { |o,i| y.find_index(o) }
index