2

谁能帮我完成这项工作?

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你的帮助...

4

4 回答 4

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."
于 2012-11-28T00:06:14.480 回答
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
于 2012-11-28T01:36:01.540 回答
0

你有一个数组数组,不是吗?并且您想检查第 index 个数组的第 8 个值是否有双精度数?

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

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

array[0...-1].include? array.last
于 2012-11-28T07:08:12.070 回答
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"]]
于 2012-11-28T07:25:06.650 回答