生成随机唯一数字的性能问题

2023-11-27

我遇到一种情况,我需要创建数以万计的唯一数字。但是这些数字必须是 9 位数字并且不能包含任何 0。我当前的方法是生成 9 个数字 (1-9) 并将它们连接在一起,如果该数字尚未在列表中,则将其添加到列表中。例如。

public void generateIdentifiers(int quantity)
{
    uniqueIdentifiers = new List<string>(quantity);
    while (this.uniqueIdentifiers.Count < quantity)
    {
        string id = string.Empty;
        id += random.Next(1,10);
        id += random.Next(1,10);
        id += random.Next(1,10);
        id += " ";
        id += random.Next(1,10);
        id += random.Next(1,10);
        id += random.Next(1,10);
        id += " ";
        id += random.Next(1,10);
        id += random.Next(1,10);
        id += random.Next(1,10);
        if (!this.uniqueIdentifiers.Contains(id))
        {
            this.uniqueIdentifiers.Add(id);
        }
    }
}

然而,在大约 400,000 时,由于生成的数字越来越多是重复的,该过程确实变慢了。我正在寻找一种更有效的方法来执行此过程,任何帮助将不胜感激。

编辑:-我正在生成这些-http://www.nhs.uk/NHSEngland/thenhs/records/Pages/thenhsnumber.aspx


正如其他人提到的,使用HashSet<T>代替List<T>.
此外,使用 StringBuilder 而不是简单的字符串操作将使您再获得 25% 的收益。如果您可以使用数字而不是字符串,那么您就赢了,因为它只需要三分之一或四分之一的时间。

var quantity = 400000;
var uniqueIdentifiers = new HashSet<int>();
while (uniqueIdentifiers.Count < quantity)
{
    int i=0;
    i = i*10 + random.Next(1,10);
    i = i*10 + random.Next(1,10);
    i = i*10 + random.Next(1,10);
    i = i*10 + random.Next(1,10);
    i = i*10 + random.Next(1,10);
    i = i*10 + random.Next(1,10);
    i = i*10 + random.Next(1,10);
    i = i*10 + random.Next(1,10);
    i = i*10 + random.Next(1,10);
    uniqueIdentifiers.Add(i);
}

在我的机器上,处理 400,000 个数字大约需要 270 毫秒,处理 1,000,000 个数字大约需要 700 毫秒。即使没有任何并行性也是如此。 由于使用了一个HashSet<T>代替List<T>,该算法的运行时间为 O(n),即持续时间将线性增长。因此,10,000,000 个值大约需要 7 秒。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成随机唯一数字的性能问题 的相关文章

  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • C# 中一次性对象克隆会导致内存泄漏吗?

    检查这个代码 class someclass IDisposable private Bitmap imageObject public void ImageCrop int X int Y int W int H imageObject
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • 我们可以通过指针来改变const定义的对象的值吗?

    include
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 为什么python+sqlite3特别慢?

    我尝试使用 Python 2 7 4 sqlite3 和 Firefox SQLite Manager 0 8 0 处理对同一数据库的相同请求 在小型数据库 8000 条记录 上 Python 和 Firefox 都运行得很快并且给出了相同
  • pandas 中数据帧中的随机/洗牌行

    我目前正在尝试找到一种方法来按行随机化数据框中的项目 我在 pandas 中按列洗牌 排列找到了这个线程 在 pandas 中对 DataFrame 进行改组 排列 https stackoverflow com questions 157
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 为什么随机不那么随机?

    有人可以解释一下现代编程语言 java c python javascript 如何应对随机性的限制以及这些限制 例如基于时间的种子 的起源 即 如果它们是由底层操作系统和基于英特尔的硬件强加的 基本上我想了解为什么没有适当的硬件就没有真正
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code

随机推荐

  • 解释 dumpsys cpuinfo

    我正在寻找 android shell 中命令 dumpsys cpuinfo 结果的解释 dumpsys cpuinfo Load 17 78 16 97 16 29 CPU usage from 35983ms to 21604ms a
  • 跨多个页面保留提供程序数据不起作用

    我在用着Provider在我的 flutter 应用程序中 当我进入新页面时 提供给Provider第 1 页的内容无法在第 2 页中访问 我所理解的方式Provider有效的一点是 有一个中心位置可以存储所有数据 并且可以在应用程序中的任
  • 低选择性色谱柱的索引和替代方案

    可用于在低选择性列上选择记录的策略范围有哪些 一个示例可能是订单表 多年来 您在其中建立了大量已完成的订单 但通常需要选择活动订单 订单可能会经历一个生命周期 例如下单 库存分配 从仓库挑选 发送给客户 开具发票和付款 订单还可能被取消 保
  • 自动化 GDB 调试会话的最佳方法是什么?

    GDB 是否有内置的脚本机制 我应该编写一个 Expect 脚本 还是有更好的解决方案 我每次都会发送相同的命令序列 并将每个命令的输出保存到一个文件中 很可能使用 GDB 的内置日志记录机制 除非有人有更好的主意 基本上 在这个例子中 我
  • SQL中什么时候需要给表名起别名?

    我注意到 在使用多个 JOIN 进行查询时 除非为其中一个表名指定一个别名 否则我的查询不起作用 这是一个简单的例子来解释这一点 This doesn t work SELECT subject from items join purcha
  • “替换不是一个函数”

    我正在尝试从数字中删除逗号 var thisbill str thisbill linebill z val if isNaN thisbill thisbill 0 00 thisbill str thisbill thisbill th
  • barh 在条之间产生不稳定的间距

    我一直在生成如下所示的条形图 请注意 由于某种原因 标签上的垂直间距不均匀 我不确定这是否与我分配刻度的方式或实际放置文本的任何机制有关 相关代码 height factor 40 0 ind np linspace 0 len sorte
  • 如何使覆盖控件高于所有其他控件?

    我需要使一个控件出现在所有其他控件之上 因此它将部分覆盖它们 如果您使用的是Canvas or Grid在您的布局中 将控件置于更高的位置ZIndex From MSDN
  • 为什么 JAX-WS 客户端在运行时访问 WSDL?

    使用 wsimport 生成 JAX WS 客户端后 wsimport keep WebService wsdl JAX WS 为何必须在运行时查找 wsdl 位置 这是一个错误吗 我发现了这篇很棒的帖子 JAX WS 客户端 访问本地 W
  • 整个一个核心专用于单个进程

    Linux 中是否有任何方法可以将一个 CPU 核心分配给特定的给定进程 并且该核心上不应调度任何其他进程或中断处理程序 我读过有关 Linux 中进程亲和力的内容使用任务集实用程序将进程绑定到 CPU但这并不能解决我的问题 因为它只是尝试
  • 我可以使用fetch来调用Notion API吗?

    我想使用 Notion 作为 SPA 的内容网关 我可以使用 fetch 中的 Notion API 吗 我正在尝试使用 fetch 来获取数据 但由于 CORS 而无法正常工作 let notion fetch import meta e
  • Microsoft Bot Framework - 机器人进入睡眠状态。有办法预防吗?

    我的基于机器人框架的机器人运行得很好 但是 当我在一段时间不活动 假设一天 后首次与机器人交互时 机器人似乎需要很长时间 大约 10 45 秒 才能发回其第一个回复 回复之后 回复时间又恢复得很好了 对我来说 后端服务似乎进入某种睡眠模式
  • 如何在不使用 setter 的情况下为类变量设置值

    我想插入一个值到Object变量而不使用设置器 如果可以的话怎么可能 这是一个例子 Class X String variableName getters and setters 现在我有一个函数 其中包含variable name the
  • FileProvider.getUriForFile 返回 NullPointerException

    我正在尝试编写我的第一个 Android 应用程序 其中涉及拍照并用它做一些事情 在查看了几个在线教程后 我整理了一些代码 但每当单击按钮时都会收到以下 NullPointerException 10 03 14 48 00 284 263
  • 如何在C89中获得SIZE_MAX

    我想得到SIZE MAX in C89 我想到了下面的方法来查找SIZE MAX const size t SIZE MAX 1 由于标准 6 2 1 2 ANSI C 规定 当有符号整数转换为相同或更大大小的无符号整数时 如果有符号整数的
  • 条件检查:if(x==0) 与 if(!x)

    有什么区别if x 0 vs if x 或者它们总是等价的 对于不同的 C 内置类型x bool int char pointer iostream 假设存在从类型到支持的类型的转换if x or if x 那么只要没有不同的转换opera
  • 有没有办法在 Spring Webflux 和 Spring Data React 中实现分页

    我试图理解 spring 5 的反应部分 我创建了简单的休息端点来使用 spring 查找所有实体web flux和 spring data reactive mongo 但没有看到任何如何实现分页的方法 这是我在 Kotlin 中的简单示
  • Hibernate:无法访问 TransactionManager 或 UserTransaction 来进行物理事务委托

    我使用 Servlet PostgreSQL 和 Hibernate 以及 EntityManager 来构建 Web 应用程序 一切正常 直到我将项目移动到基于 Maven 的项目 现在 每次我尝试从 EntityManagerFacto
  • 如何将sql DATE映射到LocalDate

    我想存储一个LocalDate in a DATE列并按原样检索它 两个都DATE and LocalDate根据定义 它们是 本地 类型 因此 概念timezone不应以任何方式干涉 下面的代码是一个最小的示例 它创建一个带有DATE内存
  • 生成随机唯一数字的性能问题

    我遇到一种情况 我需要创建数以万计的唯一数字 但是这些数字必须是 9 位数字并且不能包含任何 0 我当前的方法是生成 9 个数字 1 9 并将它们连接在一起 如果该数字尚未在列表中 则将其添加到列表中 例如 public void gene