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