Powershell 匹配属性,然后有选择地组合对象以创建第三个

2024-03-18

我对此有一个解决方案,但我相信这不是最好的方法,因为它需要永远,所以我正在寻找更快/更好/更智能的方法。

我有多个从 .csv 文件中提取的 pscustomObject 对象。每个对象至少有一个共同属性。一个相对较小(对象中大约 200-300 个项目/行),但另一个相当大(大约 60,000-100,000 个项目)。一个的内容可能与另一个的内容匹配,也可能不匹配。

我需要找到两个对象在特定属性上匹配的位置,然后将每个对象的属性组合成一个具有全部或大多数属性的对象。

代码示例片段(不准确,但它应该可以工作 - 请参阅示例数据的图像):数据表 https://i.stack.imgur.com/zWjNw.jpg

Write-Verbose "Pulling basic Fruit data together"
$Purchase = import-csv "C:\Purchase.csv"
$Selling = import-csv "C:\Selling.csv"

Write-Verbose "Combining Fruit names and removing duplicates"
$Fruits = $Purchase.Fruit
$Fruits += $Selling.Fruit
$Fruits = $Fruits | Sort-Object -Unique

$compareData = @()

Foreach ($Fruit in $Fruits) {
        $IndResults = @()
        $IndResults = [pscustomobject]@{
        #Adding Purchase and Selling data
        Farmer = $Purchase.Where({$PSItem.Fruit -eq $Fruit}).Farmer
        Region = $Purchase.Where({$PSItem.Fruit -eq $Fruit}).Region
        Water = $Purchase.Where({$PSItem.Fruit -eq $Fruit}).Water
        Market = $Selling.Where({$PSItem.Fruit -eq $Fruit}).Market
        Cost = $Selling.Where({$PSItem.Fruit -eq $Fruit}).Cost
        Tax = $Selling.Where({$PSItem.Fruit -eq $Fruit}).Tax
        }
    Write-Verbose "Loading Individual results into response"
    $CompareData += $IndResults
}

Write-Output $CompareData

我认为这个问题是这样的:

Farmer = $Purchase.Where({$PSItem.Fruit -eq $Fruit}).Farmer

如果我理解这一点,它每次经过这一行时都会查看 $Purchase 对象。我正在寻找一种方法来加快整个过程,而不是让它在每次匹配尝试时都遍历整个对象。


使用这个Join-Object https://www.powershellgallery.com/packages/Join:

$Purchase | Join $Selling -On Fruit | Format-Table

结果(使用 Simon Catlin 的数据):

Fruit      Farmer  Region     Water Market  Cost Tax
-----      ------  ------     ----- ------  ---- ---
Apple      Adam    Alabama    1     MarketA 10   0.1
Cherry     Charlie Cincinnati 2     MarketC 20   0.2
Damson     Daniel  Derby      3     MarketD 30   0.3
Elderberry Emma    Eastbourne 4     MarketE 40   0.4
Fig        Freda   Florida    5     MarketF 50   0.5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell 匹配属性,然后有选择地组合对象以创建第三个 的相关文章

随机推荐

  • Angular 6.1.0 - 恢复滚动位置未按预期工作

    RouterModule forRoot routes scrollPositionRestoration enabled 6 1 0 中的这项新功能无法按预期工作 看来 ViewportScroller 服务尝试在填充 DOM 元素之前恢
  • 使用 ggplot2 将带有文本的图像作为刻度标签

    如何使用以下命令将本地图像文件作为刻度标签和国旗下的国家 地区名称ggplot2 我想实现这样的目标 数据如下 countries c Norway Spain Germany Canada China values c 10 20 30
  • 如何在javascript中计算LaTeX公式?

    我有 LaTeX 格式的 JavaScript 字符串 例如 frac y 2 2 x frac 2 sqrt y 2 x y 2 我希望能够用定义的变量来评估它 有谁知道用于此目的的框架或库 我尝试在谷歌和堆栈中找到它 但没有成功 如果您
  • AttributeError:“模块”对象没有属性“newperson”

    我目前正在学习 python 编程 并且是初学者 目前我陷入了文件练习 所以这些是我需要做的设定事情 而不是做我想做的任何事情 不幸的是 这也意味着我可能无法做任何复杂的 对我来说 快捷方式 目前使用Python 3 2 2 我需要两个不同
  • Javascript ES6 中注册表符号 (Symbol.for) 的用途是什么?

    有这样一件事registryJS ES6 中的符号 发现在这篇 Mozilla 文章中 https hacks mozilla org 2015 06 es6 in depth symbols 它不同于Symbol Stack Overfl
  • Xcode 4 中的 openssl 库

    正如标题所示 我正在努力将 openssl 库包含在我的 xcode iOs 项目中 例如 include
  • 如何在 CMake 中将多个库目标分组为一个

    我正在尝试将多个目标分组为一个目标 以便下游用户只需要链接到该单个目标 下游用户不需要查找所有目标 并且上游库中的所有功能都可以通过链接到该目标来使用 请参阅下面我失败的尝试的 CMakeLists cmake minimum requir
  • Hovertemplate 在绘图中与 add_trace() 一起使用时显示数据两次

    我使用以下方法创建了分组条形图plotly 问题是在我的hovertemplate为了追踪我得到一个白色的盒子LA ZOO这似乎是不必要的 我想摆脱它 Animals lt c giraffes orangutans monkeys SF
  • MSDeploy 是否足够“友好”,或者可以将其封装在 MSI 文件中

    您认为 MSDeploy 包是让最终用户在其系统上安装 Web 应用程序的一个不错的选择吗 与使用 MSI 文件安装 Web 应用程序的体验相比如何 有人尝试过将 MSDeploy 包封装在 MSI 包中吗 会起作用吗 据我描述 MSDep
  • JavaFX 中加载器实例化抛出空指针

    我已经声明了两个 fxml 文件 并为每个文件声明了一个控制器 根布局控制器是一个控制器根布局 fxml and 概览控制器是一个控制器概述 fxml rootlayout 有带有文件打开项的菜单栏 overviewcontroller 有
  • Visual C++ 2012 cout 在运行时崩溃

    我今天决定尝试一下 Visual Studio 2012 Express 首先要做的就是写 Hello world 但是 我无法使其工作 我创建了一个 Windows 控制台应用程序项目 编写了标准代码 但导致了运行时错误 这是我的代码 i
  • Azure 上的 React + Express:无效的主机标头

    错误 当部署到具有多容器支持的 Azure Web Apps 时 我收到 无效的主机标头 消息来自https mysite azurewebsites com https mysite azurewebsites com 本地设置 这运行良
  • 无法在 Jenkins 上找到 TFS 插件 [重复]

    这个问题在这里已经有答案了 无法找到适用于 Jenkins 的 TFVC 或 Azure DevOps 和 Team Foundation Server 插件 詹金斯版本 2 263 1 由于安全漏洞 TFS 插件的官方分发已暂停 在 Je
  • 空值 - 布尔表达式

    所以我有一个关于考试作业的问题 在这个作业中我们有一堆布尔表达式 例如 FALSE OR NULL NULL 然后我们需要写出布尔表达式的值 为此 我使用了三值逻辑 但是当您获得如下布尔表达式时 它如何应用 NULLL AND TRUE O
  • 如何使用 sql 查询将数据库的子集提取到 dbunit 文件中?

    Why 我有一个很大的 Oracle 表 我想测试一些 DAO 方法 为此 我使用 dbunit Problem 我想使用 sql 查询将现有数据库的子集提取为 dbunit 平面 xml 文件 查询示例 Select t1 field1
  • spring任意消息传递tcp套接字

    我正在使用 spring integration 开发定制的双向 TCP 套接字服务器 服务器将处理请求 响应任务 但我无法向特定的连接 ID 发送任意消息 我也知道也许使用TcpSendingMessageHandler and TcpR
  • 如何在Python Flask中定位项目的for循环

    所以 我在烧瓶中有一个项目的 for 循环 我正在尝试找到一种方法将它们放置在页面上 我在引导卡中有一个任务的 for 循环 当用户创建卡片时 卡片变得非常愚蠢 并且定位变得非常奇怪 截图 https ibb co hRjCrFf 老师作业
  • 如何使用 GitHub API 确定提交属于哪个 Pull Request?

    给定提交 SHA 我想使用 GitHub API 来确定它属于哪个拉取请求 GitHub 在上显示此信息提交页面 https github com hammerlab pileup js commit ee49f07dba3821109b3
  • 获取MySQL语句的精确执行时间

    现在的结果表明 集合中的 X 行 0 00 秒 所以我想知道是否有办法可以得到小数点后两位以上的时间 Execute set profiling 1在运行语句之前 然后获取计时show profiles query See 显示配置文件语法
  • Powershell 匹配属性,然后有选择地组合对象以创建第三个

    我对此有一个解决方案 但我相信这不是最好的方法 因为它需要永远 所以我正在寻找更快 更好 更智能的方法 我有多个从 csv 文件中提取的 pscustomObject 对象 每个对象至少有一个共同属性 一个相对较小 对象中大约 200 30