AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77592973
Accepted
Simon Elms
Simon Elms
Asked: 2023-12-03 11:50:48 +0800 CST2023-12-03 11:50:48 +0800 CST 2023-12-03 11:50:48 +0800 CST

其中方法将哈希表转换为集合

  • 772

在 PowerShell 中,我有一个哈希表列表。我使用了一种Where()方法来选择列表中的哈希表之一,因为我读到的Where()速度比Where-Object. 但是,当我尝试对选定的哈希表进行操作时,我发现它已通过该Where()方法转换为集合。我无法将其转换回哈希表。

有没有办法让Where()方法返回哈希表而不是集合?

如果必须的话,我可以使用Where-Object它返回一个哈希表。Where()但是,如果有简单的解决方法,我宁愿坚持下去。

一些演示代码:

Clear-Host

[System.Object[]]$SqlServers = @(
                                    @{
                                        key="L"; 
                                        connectionString="Server=(localdb)\\mssqllocaldb;Database=Test;Trusted_Connection=yes;";
                                    },
                                    @{
                                        key="D"; 
                                        connectionString="Server=DEV.DEV.LOCAL;Database=Test;Trusted_Connection=yes;";
                                    }
                                )
$UserSelection = 'L'

$selectedServerDetails = $SqlServers.Where({$_.key -eq $UserSelection})
$selectedServerDetails2 = $SqlServers | Where-Object{$_.key -eq $UserSelection}

$selectedServerDetails3 = ($selectedServerDetails -as [hashtable])

$selectedServerDetails.GetType().FullName
$selectedServerDetails2.GetType().FullName
if ($selectedServerDetails3 -eq $null) { '$selectedServerDetails3 is null' } else { $selectedServerDetails3.GetType().FullName }

结果是:

System.Collections.ObjectModel.Collection`1[[System.Management.Automation.PSObject, System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]
System.Collections.Hashtable
$selectedServerDetails3 is null

顺便说一下,我尝试将 的数据类型更改$SqlServers为[hashtable[]]$SqlServers. 这没有什么区别。

powershell
  • 1 1 个回答
  • 24 Views

1 个回答

  • Voted
  1. Best Answer
    mklement0
    2023-12-03T12:28:06+08:002023-12-03T12:28:06+08:00

    与cmdlet不同,内部方法始终返回一个集合- 即使输入集合中只有一个元素匹配。Where-Object .Where()

    • 顺便说一句:与 不同的是Where-Object,通过其可选的第二个参数.Where()提供了优化:一旦找到第一个匹配项就立即返回,从而使过滤'First' 短路- 下面应用了此优化。

    • 不幸的是,Where-Object 不提供相同的短路是不对称的,这是GitHub 问题 #13834中功能请求的主题。

    此外,每个匹配元素都被包裹在一个几乎不可见的[psobject]包装中。

    • 不幸的是,在某些情况下,这个原本不可见的实现细节[psobject]包装器确实会导致行为差异 - 请参阅GitHub 问题 #5579。

    因此,只需使用索引来提取(唯一)匹配元素,即[0]:

    $selectedServerDetails =
      $SqlServers.Where({$_.key -eq $UserSelection}, 'First')[0]
    

    要排除不可见包装器的潜在副作用[psobject],请使用内在psobject属性,通过.BaseObject属性 来提取包装的 .NET 对象:

    $selectedServerDetails = 
      $SqlServers.Where({$_.key -eq $UserSelection}, 'First')[0].psobject.BaseObject
    
    • 2

相关问题

  • 如何获取作业的进程句柄?

  • PowerShell 一行代码 - 如何

  • Powershell 5.1:我的模块中缺少别名描述

  • Import-CSV:将行(成员)添加到 foreach 循环中的结果对象

  • 在所有startthreadjob powershell中使用和修改我的变量

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve