如何使用Ruby计算数组中唯一绝对值的数量?

时间:2014-07-06 15:46:29

标签: ruby arrays sorting

有一个给定的数组不是空的,它由N个值组成。数组按升序排序。

任务是编写一个函数来计算数组中唯一绝对值的数量。

例如,数组A是:

A [0] = -5

A [1] = -3

A [2] = -1

A [3] = 0

A [4] = 3

A [5] = 6

绝对数字是唯一的5,因为有5个唯一的绝对值是0,1,3,5,6。

假设:

N是整数范围[1 ... 100,000];数组a按升序排序。

到目前为止,我已经这样做了:

class AbsoluteUnique

  def initialize int_array
    puts "Enter content for the array:"
    5.times do
      int_array << gets

      if A.size == 5
        find_count
      end
    end
  end

  def find_count

  end
end

显然这还不够,但我发现很难弄清楚功能的其余部分。能否帮我找到这5个绝对的,独特的价值观?

谢谢。

4 个答案:

答案 0 :(得分:4)

Uniq采用可选块 - 比较块的结果是唯一性而不是值本身 - 所以你可以做

array.uniq(&:abs).length

答案 1 :(得分:2)

如果你有一个整数数组a,那么:

a = [-5, -3, -1, 0, 3, 6]

这应该这样做:

a.map {|n| n.abs}.uniq.length

如果需要为标准输入采用数组,这将是这样做的方法:

a = []
puts "Enter 5 integers separated by newlines: "
until(a.length == 5)
  a << gets.chomp.to_i
end
puts "There are #{a.map {|n| n.abs}.uniq.length} unique absolute values in your list."

答案 2 :(得分:2)

这应该有效:

array.map(&:abs).uniq.count

答案 3 :(得分:-1)

[-5, -3, -1, 0, 3, 6].group_by(&:abs).length
# => 5