我有两个阵列
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进行排序并比较另外两个元素但它必须是相关的
答案 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]