鉴于
number_strings = ["ichi", "ni", "san", "ku"]
fixnums = [1, 2, 3, 9]
如何获得相应的fixnum不均匀的number_strings列表?
number_strings.reject.each_with_index do |string, index|
fixnums.fetch(index).even?
end
和
一样有用pairs = number_strings.zip(fixnums)
pairs.reject{|_, fixnum| fixnum.even?}.map(&:first)
但两者都有点冗长。
答案 0 :(得分:1)
我认为它们都非常冗长。
Hash[number_strings.zip(fixnums)].select { |k, v| v.odd? }.keys
答案 1 :(得分:0)
使用fix
和select
:
fixnums.zip(number_strings).select { |k, v| k.odd? }.map(&:last)
=> ["ichi", "san", "ku"]
答案 2 :(得分:0)
我实际上认为你的解决方案很好,我能想到的唯一选择就是这个,这就是冗长:
number_strings.zip(fixnums).map { |str, fn| str if fn.odd? }.compact
答案 3 :(得分:0)
在Ruby 1.9中,你可以这样做:
number_strings = ["ichi", "ni", "san", "ku"]
fixnums = [1, 2, 3, 9]
enum = fixnums.each
number_strings.select{ enum.next.odd? }
答案 4 :(得分:0)
你认为它有点冗长是正确的,那是因为Ruby没有列表推导的语法。一个简单的抽象,如Enumerable#comprehend -if not beautiful - 非常接近(理解= map + compact):
number_strings.zip(fixnums).comprehend { |s, n| s if n.odd? }