Ruby双重与索引比较

时间:2012-11-27 23:39:56

标签: ruby arrays compare

任何能帮助我完成这项工作的人都会这样做吗?

array.each_with_index do |buffer,index|

    if array[index][8] == array[1..7][8]
      puts "match found"
    end
end

我想比较是否有双峰,但我如何将搜索范围定义为我的数组索引值,从1到7除了索引?

只是为了说清楚我想比较array[1][8],[2][8],[3][8]等除了[index][8]

感谢你的帮助......

4 个答案:

答案 0 :(得分:1)

ar =  [1,2,8,4,5,6,7,8]
last = ar.last
puts "match found" if ar[0..-2].any?{|el| el == last} # => match found

困难部分可能是ar[0..-2]位。ar[1..-1]会导致数组从第二个元素切换到结尾; ar[0..-2]从开头到结尾减去一个。请注意,在找到一个匹配项后退出。以下代码计算匹配项:

ar =  [1,2,8,4,5,6,7,8]
puts "found #{ar[0..-2].count(ar.last)} matches."

答案 1 :(得分:0)

你想算出双峰吗?

array[0..-2].find_all{|el| el == array.last}.length

或者你想要每个双峰的索引值吗?

hash = Hash.new { |h,k| h[k] = [] }

array[0..-2].each_with_index do |el, idx|
  hash[el] << idx if el == array.last
end

答案 2 :(得分:0)

你有一个数组数组,不是吗?并且你想检查index'th数组的第8个值是否有双打?

array.map{|a| a[8]}.count(array[index][8]) > 1

要检查数组中是否重复了最后一个元素,请执行以下操作:

array[0...-1].include? array.last

答案 3 :(得分:0)

您可以使用group_by创建任意双联的组:

array.group_by {|v| v[8] }

这会给你一个{"group key" => ["group", "members"]}哈希。

要获取所有双联的列表,只需选择具有多个成员的组:

array.group_by {|v| v[8] }.values.select {|g| g.length > 1 }

此外,要消除列表中的任何双重内容:

array.group_by {|v| v[8] }.values.map(&:first)

这将返回一个新数组,其中删除了任何双精度数,因此只返回任何给定双精度数中的第一项。

array = [
  %w(1 2 3 4 5 6 7 8 9),
  %w(1 2 3 4 5 6 7 8 9),
  %w(a b d e f g h i j),
  %w(a b d e f g h i j),
  %w(j k l m n o p q r)
]

pp array.group_by {|v| v[8] }.values.map(&:first)

# Output:
# [["1", "2", "3", "4", "5", "6", "7", "8", "9"],
# ["a", "b", "d", "e", "f", "g", "h", "i", "j"],
# ["j", "k", "l", "m", "n", "o", "p", "q", "r"]]