从相关数组中选择数据

时间:2015-06-21 13:34:49

标签: arrays ruby

我有两个阵列

arr1 = ["a", "b", "c", "d", "e"]
arr2 = [3, 221, 1, 4, 25]

他们的价值观必须相关:a-> 3,b-> 221等等。 我想选择第二个数组中每个元素之间的差异小于x的对,例如5。

我期待结果为:

a 3
c 1
d 4

我试图对arr2进行排序并比较另外两个元素但它必须是相关的

2 个答案:

答案 0 :(得分:1)

由于没有明确应该如何操作1, 2, 10, 11, 100数组,下面是一个“模式”答案,可以用于你拥有的任何条件。

values = arr2.permutation(2).select do |a,b| 
  (a-b).abs < 5 # or whatever condition
end.flatten.uniq

arr1.zip(arr2).select do |a,b|
  values.include? b
end.to_h

#⇒ {  "a" => 3, "c" => 1, "d" => 4 }

答案 1 :(得分:0)

另一种解决方法:

hash = Hash[arr1.zip(arr2)]
vals = hash.values.sort
indexes = vals.each_cons(2).collect { |a,b| b-a }.each_with_index.map{ |a, i| i+1 if a < 5 }.compact
indexes.unshift(0).uniq! if vals[indexes.first] == 1 && (vals[1] - vals[0]) > 5
hv = indexes.map { |i| vals[i] }
hv.each { |v| p hash.key(v).to_s + " " + v.to_s}
#"c 1"
#"a 3"
#"d 4"
# => [1, 3, 4]