ruby - 如何查找并返回数组中的重复值

标签 ruby arrays

arr 是字符串数组:

["hello", "world", "stack", "overflow", "hello", "again"]

检查 arr 是否有重复项的简单而优雅的方法是什么,如果有,则返回其中一个(无论是哪个)?

例子:

["A", "B", "C", "B", "A"]    # => "A" or "B"
["A", "B", "C"]              # => nil

最佳答案

a = ["A", "B", "C", "B", "A"]
a.detect{ |e| a.count(e) > 1 }

我知道这不是一个非常优雅的答案,但我喜欢它。这是一个漂亮的类轮代码。除非你需要处理庞大的数据集,否则工作得很好。

正在寻找更快的解决方案?给你!

def find_one_using_hash_map(array)
  map = {}
  dup = nil
  array.each do |v|
    map[v] = (map[v] || 0 ) + 1

    if map[v] > 1
      dup = v
      break
    end
  end

  return dup
end

它是线性的,O(n),但现在需要管理多行代码,需要测试用例等。

如果您需要更快的解决方案,不妨试试 C。

这里是比较不同解决方案的要点:https://gist.github.com/naveed-ahmad/8f0b926ffccf5fbd206a1cc58ce9743e

关于ruby - 如何查找并返回数组中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8921999/

相关文章:

ruby-on-rails - Rails 4 - Mailer deliver_later 没有按照我的预期进行,阻止了 UI

ruby - 使用 Ruby Curb 进行基本身份验证发帖

css - Rails 服务器未加载 application.css

c - 尝试将元素附加到多维数组。尝试运行应用程序时抛出异常

arrays - Kotlin 中的二维数组

javascript - 摆脱对象数组中的重复项

ruby - yield 如何与 Ruby 中的 block 一起使用?

ruby - 如何替换载波中现有版本的图像?

c++ - 当作为指向结构的指针的成员传递时,将 C 数组清零

Java数组栈,从上到下打印栈内容