谁能帮我做这个工作?
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 你的帮助...
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."
您可以使用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"]]
你想数双峰吗?
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
你有一个数组数组,不是吗?您想检查索引数组的第 8 个值是否有双倍?
array.map{|a| a[8]}.count(array[index][8]) > 1
要只检查数组中的最后一个元素是否重复,请执行以下操作:
array[0...-1].include? array.last