如何基于并行数组拒绝来自一个数组的值?

时间:2011-10-10 06:39:31

标签: ruby arrays

鉴于

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)

但两者都有点冗长。

5 个答案:

答案 0 :(得分:1)

我认为它们都非常冗长。

Hash[number_strings.zip(fixnums)].select { |k, v| v.odd? }.keys

答案 1 :(得分:0)

使用fixselect

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? }