具有初始容量的 Powershell 哈希表

2023-12-31

我想知道你如何在 powershell 中声明具有初始容量的哈希表。我知道我想要它有多大,但我必须在循环中为其分配值。

所以像这样:

$hashtable = @{} (100)

杰伦·莫斯特 https://stackoverflow.com/users/4137916/jeroen-mostert很好地说明了为什么你可能不这样做need指定初始容量:

请注意,预先指定容量通常不会在内存或运行时间方面为您带来太多好处;它已经实现了慷慨的动态调整,如果你的猜测不正确,那么好处基本上就会消失。

如果您确实需要指定初始容量:

Tip of the hat to PetSerAl https://stackoverflow.com/users/4003407/petseral for his help.

因为 PowerShell 哈希表总是不区分大小写关于关键查找,[hashtable]::new(100) does not不幸的是,工作,因为默认是创建一个案例 -敏感的哈希表。

Therefore, use of a [System.Collections.Hashtable] constructor overload that allows specifying the key-equality comparison method is required, so that you can specify a culture-sensitive, case-insensitive equality comparer to match PowerShell's usual hashtable behavior in v6.1-[1]:

# PSv5+ syntax
$hashtable = [hashtable]::new(100, [StringComparer]::CurrentCultureIgnoreCase)

# PSv4- syntax
$hashtable = New-Object hashtable 100, ([StringComparer]::CurrentCultureIgnoreCase)

PetSerAl 提供以下替代方案:

$hashtable = [System.Collections.Specialized.CollectionsUtil]::CreateCaseInsensitiveHashtable(100)

注:在v6.2+电源外壳现在使用一个ordinal字符串比较器 ([StringComparer]::OrdinalIgnoreCase).

此外,正如 PetSerAl 指出的那样,PowerShell v6.1-caches当前会话的关键平等比较器 - 因此当前文化的会话中更改是ignored。如果您想模拟这种有问题的行为,PetSerAl 提供了以下命令:

$hashtable = [hashtable]::new(100,
 [hashtable].GetProperty(
   'EqualityComparer',
   [System.Reflection.BindingFlags]'NonPublic, Instance'
 ).GetValue(@{}))

Despite the use of reflection to access a non-public property, this approach should be safe, because the targeted property's access modifier is protected, which means it has a "contract" with derived public classes and won't go away.


请注意,优化哈希表的另一种方法是指定其负载系数,并且还有用于指定该因子的构造函数重载。

From the docs https://learn.microsoft.com/en-us/dotnet/api/system.collections.hashtable.-ctor#System_Collections_Hashtable__ctor(强调):

哈希表的capacity用于根据负载因子计算哈希表桶的最佳数量。容量会根据需要自动增加。

The 负载系数是元素与桶的最大比率。较小的负载因子意味着更快的查找,但会增加内存消耗。

当实际负载率达到指定负载率时,桶数自动增加到大于当前桶数两倍的最小素数。


[1] Note that in many contexts PowerShell uses the invariant culture for string operations, but hashtables seem to be an exception - see this GitHub issue https://github.com/PowerShell/PowerShell/issues/8280 and this answer https://stackoverflow.com/a/37603732/45375.
The v6.1- source code https://github.com/PowerShell/PowerShell/blob/877b9a9fbf0bed3876de3c00ff34525aba96c749/src/System.Management.Automation/engine/parser/Compiler.cs#L5694-L5696 reveals the use of CurrentCultureIgnoreCase in PowerShell's hashtable constructor, and the v6.2+ source code https://github.com/PowerShell/PowerShell/blob/1e5655b48cdad707ee3678435c4b587c0856a35c/src/System.Management.Automation/engine/parser/Compiler.cs#L6442-L6444 now shows use of ordinal (case-insensitive) comparison.

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

具有初始容量的 Powershell 哈希表 的相关文章

  • 为管道重用自定义对象时出现意外结果

    A while ago I changed my Join Object https stackoverflow com a 45483110 1701026 cmdlet which appeared to cause a bug whi
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • () 和 $() 之间的区别[重复]

    这个问题在这里已经有答案了 有什么区别 Write Host Get Date just paren and Write Host Get Date dollar paren 括号内的内容可以是任何内容 仅举一个简单的示例 两者有什么区别吗
  • SQL Server:删除除系统数据库之外的所有数据库

    在 PowerShell 中 我使用以下代码删除所有非系统 SQL Server 数据库 invoke sqlcmd ServerInstance sqlInstanceName U sqlUser P sqlPass Query EXEC
  • PowerShell Trim 字符串包含“< char >$”的错误?

    如果我使用Trim 包含字符串的方法 char repeated char 例如 BL LA 或 LA AB Trim 删除之后的重复字符 以及 例如 a BL LA b a Trim BL returns A not LA but a B
  • 替换 CSV 文件中的引号和特殊字符的一些难题

    我在处理一些需要清理并加载到数据库中的 CSV 文件时遇到了一些难题 我相当擅长使用 PowerShell 但不擅长正则表达式和 csv 列操作 这是我遇到的问题 我正在使用的 CSV 文件中有一个 注释 字段 可以包含各种不同的字符 主要
  • 使用 powershell 编辑 XML

    好吧 我感觉自己像个大白痴 为了工作中的管理目的 我使用 Powershell 已经有一段时间了 也就是说 编写脚本不是我的强项 现在 我正在尝试编写一个 PS 脚本 将一个部分添加到一堆机器上的 XML 中 以添加设置来解决我们在某个应用
  • 带有多个附件的电子邮件

    我正在为服务台编写一个 PowerShell 脚本 以便在将 userhome 文件夹从服务器迁移到 NAS 设备时使用 帮助台用户将用户名输入到 userhomelist txt 文件中 我的问题是我无法获取脚本来附加所有日志文件 电子邮
  • 如何在 Powershell 中自动对提示回答“是”?

    如何在 PowerShell 会话中输入 是 作为交互式问题的答案 我知道 在 Bash 中 Yes是在提示上回答 是 的工具 在我的情况下 我无法抑制提示 我正在运行的脚本停止于 如果您想继续 请回复 是 powershell 如何运行脚
  • Powershell脚本将多个远程地址添加到防火墙规则

    我正在尝试编写一个脚本 该脚本将循环遍历本地防火墙规则并更新远程地址表 这是我到目前为止所拥有的 它不起作用 应该很简单 所以不确定发生了什么 该脚本运行时没有错误 但实际上并没有更新任何内容 name Get NetFirewallRul
  • 如何使用Powershell变量打开Edge?

    我已经尝试过以下方法 edge New Object com microsoft edge application edge visible true edge FullScreen true 但我收到错误 New Object Retri
  • Powershell - 从图像网址下载图像

    对 powershell 的了解有限 我尝试从图像网址下载图像 例如这样 http hdwallpaperia com wp content uploads 2014 01 Mc Laren P1 Wallpaper Image Pictu
  • $Error 变量为 $Null 但 $_ 在 Catch 中包含错误

    我有 PS 模块 其中包含许多用于各个功能的脚本 还有一个 库 脚本 其中包含许多辅助函数 这些函数由模块中使用的函数调用 我们调用外部函数ReadWeb 并且它使用辅助函数ParseXML 本周我在内部助手中遇到了错误处理问题ParseX
  • 如何使用卸载路径卸载 MSI

    我正在尝试获取一组应用程序的卸载路径并卸载它们 到目前为止 我得到了卸载路径列表 但我很难真正卸载这些程序 到目前为止我的代码是 app msi1 msi2 msi3 msi4 Regpath HKLM Software Microsoft
  • 将 Unicode 字符串转换为 ASCII

    我的字符串包含 ASCII 中未找到的字符 如 我需要一个函数将它们转换为可接受的内容 例如 a e i o u 这是因为我将根据这些字符串创建 IIS 网站 即我将使用它们作为域名 function Convert DiacriticCh
  • 具有多个范围的 Powershell 整数参数验证

    我知道您可以声明一个仅接受特定范围内的值的整数参数 Parameter ValidateRange 1024 66535 Port 是否可以验证多个范围的参数输入 例如 假设我希望允许端口输入为 1 到 80 135 到 445 以及 10
  • 获取在特定日期之后修改的一组文件

    有没有人有一个方便的 powershell 脚本根据修改日期从 TFS 获取一组文件 我想说 给我这个文件夹 或子文件夹 中在 X Y ZZZZ 之后修改的所有文件 并将这些文件转储到它们通常所在的文件夹之外的文件夹中 我知道足够的 pow
  • 如何在不安装 AWS SDK 的情况下通过 Powershell 从 S3 下载文件?

    我想使用 Windows Powershell 从我的 AWS S3 存储桶下载文件 我无法安装任何 AWS 软件 需要创建一个 API 才能访问 AWS S3 中的文件 我使用Postman测试该文件是否可访问并且成功 鉴于这一成功 我尝
  • 当存在另一个参数时在 PowerShell 中需要参数

    到目前为止我读到的所有内容都告诉我这应该有效 这是一个用于自动从 AD 帐户转出的脚本 我希望它的工作方式是 如果设置了 TransferHomeDrive 开关 那么它将需要旧服务器和新服务器的名称 我相信我应该能够通过参数集来做到这一点
  • Powershell从字符串中获取数字

    大家好 我正在尝试使用 powershell 从用户 ID 中获取号码 我们使用的格式是名字的第一个字母 姓氏的前四个字母和学生 ID 因此名为 John Smith ID 123456 的学生将是 jsmit123456 如果用户的名字少

随机推荐

  • 使用 jquery 在 div 内添加、调整大小、位置、颜色更改文本

    我期待创建一种非常简单的方法 允许用户在文本中书写 调整大小 位置或更改文本的颜色 div 我对 jQuery 了解一点 My HTML div class canvas div class u test class Testing div
  • Clojure - 将列表转换为 Java 数组

    除了首先将 Clojure 列表转换为向量并使用之外 是否有任何惯用的方法将 Clojure 列表转换为 Java 数组进入数组 意思是 除了 into array vec my list 因为我不想要额外的开销 你的问题似乎是基于一个错误
  • 基于索引列创建新列

    我有一个包含 n 个观察值的数据集和一个包含观察值索引的列 例如 col1 col2 col3 ID 12 0 4 1 6 5 3 1 5 21 42 2 并想根据我的索引创建一个新列 例如 col1 col2 col3 ID col ne
  • 如何从 Android 的 xml 字符串资源中检索 2D 数组?

    假设我在 android 资源中存储了一个二维数组 如下所示 如何将它们放入像 Arraylist 这样的 java 集合中
  • Google App Engine 上的 Spring security openid

    有人知道如何让 Spring security openid 在 Google App Engine 上工作吗 我试过了 但是有一个java security AccessControlException access denied err
  • 在 spacy 的帮助下合并几乎相似的行

    如果某些行几乎相似 我想合并它们 可以使用 spaCy 检查相似性 df string yellow color yellow color looks like yellow color bright red color okay red
  • 将数据传递到 django 表单

    class Test forms Form def set choices self choices self choices choices def get choices self return self choices options
  • 查看 TeamCity 服务消息

    我正在对 TeamCity 9 0 4 中的构建步骤进行故障排除 问题似乎出在服务消息输出中 构建完成后可以查看这些吗 它们不包含在构建日志中 关于服务消息的文档简单地说In order to be processed by TeamCit
  • 使用 jQuery 获取锚元素的绝对 URL

    给定一个锚元素 类似于 a first 如何获取锚点指向的绝对URL 如果您使用的是 jQuery 1 6 您可以使用 prop a first prop href 1 6之前 您可以访问href直接在 DOM 元素上使用属性 a firs
  • 访问结果集行中的值,其中该值来自 MySQL 函数调用

    因此 由于普通的 PHP 查询返回一个数组 所以从未向我解释过当列值是 MySQL 函数调用的返回值时 如何实际从查询的结果集数组中提取值 countThemes Singlequery SELECT COUNT 1 FROM items
  • 如何正确增加 mongoDB 中的多个日期?

    我不是一个特别擅长 Javascript 的人 我在尝试更新很多内容时遇到了一些麻烦DateMongo 中的对象 看起来 inc尚未实施Date objects https jira mongodb org browse SERVER 31
  • Facebook OAuth api 登录问题

    我对用于登录的 Facebook API 感到困惑 我在网上找不到任何有用的信息 我的 FB 会话委托方法没有被调用 并且访问令牌和过期日期值没有被设置 所以我认为我从未登录过 我恢复到一个非常简单的应用程序 只有两个按钮 登录 注销 和一
  • openFrameworks 与处理

    我已经阅读了很多有关 openFrameworks 和 Processing 的内容 但仍然无法区分 除了一个是 C 中的 另一个是 Java 中的 有人能告诉我哪个具体是做什么用的吗 你是对的 一个是 C 另一个是 Java 这些差异适用
  • Graphql: "message": "ID 不能代表值: 5a72240cf31713598588b70f"

    I use moongose与 一起工作mongodb on nodejs基于应用程序 目前 我尝试实施Grapqhl基于API 我的查询graphql架构如下所示 const schema buildSchema type Query p
  • ng-show 当数组长度为零时

    我是 AngularJS 的初学者 我试图在过滤过程中在 的帮助下显示 未找到标签 ng show JS function simpleController scope scope tags HTML CSS Jquery Bootstra
  • 如何在 bookshelf.js 中获取 SQLSTATE?

    在与 PostgreSQL 或其他 RDBMS 通信时 如何检测 bookshelf js 中发生的错误类型 提示者 这个问题 https stackoverflow com q 43815157 398670 我自己不使用 bookshe
  • 如何在 PHP 中转义引号? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有那个代码 a href Add an Img a 我不知道如何把它放在这里echo code 这会起作用 已测试
  • 如何使用设置了“num_epochs”的“read_batch_examples”创建“input_fn”?

    我有一个基本的input fn可以与下面的 Tensorflow 估计器一起使用 无需设置即可完美运行num epochs范围 获得的张量具有离散形状 传入num epochs与其他任何事物一样None结果是未知的形状 我的问题在于在使用时
  • React-MobX 错误:“decorators”插件需要“decoratorsBeforeExport”选项,其值必须是布尔值

    我收到以下错误 如果您从 Babylon Babel 6 迁移或想要使用旧的装饰器提案 则应该使用 decorators legacy 插件而不是 decorators 包 json babel plugin proposal decora
  • 具有初始容量的 Powershell 哈希表

    我想知道你如何在 powershell 中声明具有初始容量的哈希表 我知道我想要它有多大 但我必须在循环中为其分配值 所以像这样 hashtable 100 杰伦 莫斯特 https stackoverflow com users 4137