Arrays Powershell数组排序并分为两个不同的数组
我有这个阵列:Arrays Powershell数组排序并分为两个不同的数组,arrays,powershell,sort-object,Arrays,Powershell,Sort Object,我有这个阵列: [ "org-dummyemail-123-AccountName", "org-dummyemail-123-Email", "org-dummyemail-123-PAT", "org-dummyemail-123-PATName", "org-dummyemail-123-PATValidTo", "org-dummyemail1-joemarmoto-AccountName", "org-dummyemail1-joemarmoto-Email", "org-dummy
[
"org-dummyemail-123-AccountName",
"org-dummyemail-123-Email",
"org-dummyemail-123-PAT",
"org-dummyemail-123-PATName",
"org-dummyemail-123-PATValidTo",
"org-dummyemail1-joemarmoto-AccountName",
"org-dummyemail1-joemarmoto-Email",
"org-dummyemail1-joemarmoto-PAT",
"org-dummyemail1-joemarmoto-PATName",
"org-dummyemail1-joemarmoto-PATValidTo"
]
我想把它整理出来,制作两个像这样的独立阵列
[
"org-dummyemail-123-AccountName",
"org-dummyemail-123-Email",
"org-dummyemail-123-PAT",
"org-dummyemail-123-PATName",
"org-dummyemail-123-PATValidTo"
]
[
"org-dummyemail1-joemarmoto-AccountName",
"org-dummyemail1-joemarmoto-Email",
"org-dummyemail1-joemarmoto-PAT",
"org-dummyemail1-joemarmoto-PATName",
"org-dummyemail1-joemarmoto-PATValidTo"
]
希望你的帮助!谢谢:)简单数组筛选:
$arr="org-dummyemail-123-AccountName",
"org-dummyemail-123-Email",
"org-dummyemail-123-PAT",
"org-dummyemail-123-PATName",
"org-dummyemail-123-PATValidTo",
"org-dummyemail1-joemarmoto-AccountName",
"org-dummyemail1-joemarmoto-Email",
"org-dummyemail1-joemarmoto-PAT",
"org-dummyemail1-joemarmoto-PATName",
"org-dummyemail1-joemarmoto-PATValidTo"
$arr2 = $arr.where{$PSItem -match 'joemarmoto'}
$arr3 = $arr.where{$PSItem -notmatch 'joemarmoto'}
简单数组筛选:
$arr="org-dummyemail-123-AccountName",
"org-dummyemail-123-Email",
"org-dummyemail-123-PAT",
"org-dummyemail-123-PATName",
"org-dummyemail-123-PATValidTo",
"org-dummyemail1-joemarmoto-AccountName",
"org-dummyemail1-joemarmoto-Email",
"org-dummyemail1-joemarmoto-PAT",
"org-dummyemail1-joemarmoto-PATName",
"org-dummyemail1-joemarmoto-PATValidTo"
$arr2 = $arr.where{$PSItem -match 'joemarmoto'}
$arr3 = $arr.where{$PSItem -notmatch 'joemarmoto'}
另一种稍有不同的方法是使用
Group对象
cmdlet对计算属性进行分组。您没有指定要排序的确切部分-虚拟电子邮件或其后面的名称-因此我使用虚拟电子邮件后面的部分
结果为您提供了一个数组集合,其中包含名称[计算属性]和组[与该计算属性匹配的项]。您可以单独寻址它们,也可以使用它们来创建新数组
$AllNames = @(
'org-dummyemail-123-AccountName',
'org-dummyemail-123-Email',
'org-dummyemail-123-PAT',
'org-dummyemail-123-PATName',
'org-dummyemail-123-PATValidTo'
'org-dummyemail1-joemarmoto-AccountName',
'org-dummyemail1-joemarmoto-Email',
'org-dummyemail1-joemarmoto-PAT',
'org-dummyemail1-joemarmoto-PATName',
'org-dummyemail1-joemarmoto-PATValidTo'
)
# 3rd item index = 2
$PartToGroupOn = 2
$GroupedAllNames = $AllNames |
Group-Object -Property {$_.Split('-')[$PartToGroupOn]}
$GroupedAllNames[1].Group
输出
org-dummyemail-123-AccountName
org-dummyemail-123-Email
org-dummyemail-123-PAT
org-dummyemail-123-PATName
org-dummyemail-123-PATValidTo
另一种稍有不同的方法是使用
Group对象
cmdlet对计算属性进行分组。您没有指定要排序的确切部分-虚拟电子邮件或其后面的名称-因此我使用虚拟电子邮件后面的部分
结果为您提供了一个数组集合,其中包含名称[计算属性]和组[与该计算属性匹配的项]。您可以单独寻址它们,也可以使用它们来创建新数组
$AllNames = @(
'org-dummyemail-123-AccountName',
'org-dummyemail-123-Email',
'org-dummyemail-123-PAT',
'org-dummyemail-123-PATName',
'org-dummyemail-123-PATValidTo'
'org-dummyemail1-joemarmoto-AccountName',
'org-dummyemail1-joemarmoto-Email',
'org-dummyemail1-joemarmoto-PAT',
'org-dummyemail1-joemarmoto-PATName',
'org-dummyemail1-joemarmoto-PATValidTo'
)
# 3rd item index = 2
$PartToGroupOn = 2
$GroupedAllNames = $AllNames |
Group-Object -Property {$_.Split('-')[$PartToGroupOn]}
$GroupedAllNames[1].Group
输出
org-dummyemail-123-AccountName
org-dummyemail-123-Email
org-dummyemail-123-PAT
org-dummyemail-123-PATName
org-dummyemail-123-PATValidTo
将输入视为Json对象(来自此处字符串) 剧本
- 使用Select Object和
计算属性李> - 按此键分组
- 从组值重建Json对象
有以下输出:
[
"org-dummyemail-123-AccountName",
"org-dummyemail-123-Email",
"org-dummyemail-123-PAT",
"org-dummyemail-123-PATName",
"org-dummyemail-123-PATValidTo"
]
[
"org-dummyemail1-joemarmoto-AccountName",
"org-dummyemail1-joemarmoto-Email",
"org-dummyemail1-joemarmoto-PAT",
"org-dummyemail1-joemarmoto-PATName",
"org-dummyemail1-joemarmoto-PATValidTo"
]
将输入视为Json对象(来自此处字符串) 剧本
- 使用Select Object和
计算属性李> - 按此键分组
- 从组值重建Json对象
有以下输出:
[
"org-dummyemail-123-AccountName",
"org-dummyemail-123-Email",
"org-dummyemail-123-PAT",
"org-dummyemail-123-PATName",
"org-dummyemail-123-PATValidTo"
]
[
"org-dummyemail1-joemarmoto-AccountName",
"org-dummyemail1-joemarmoto-Email",
"org-dummyemail1-joemarmoto-PAT",
"org-dummyemail1-joemarmoto-PATName",
"org-dummyemail1-joemarmoto-PATValidTo"
]
使用$PSItem变量
$arr="org-dummyemail-123-AccountName",
"org-dummyemail-123-Email",
"org-dummyemail-123-PAT",
"org-dummyemail-123-PATName",
"org-dummyemail-123-PATValidTo",
"org-dummyemail1-joemarmoto-AccountName",
"org-dummyemail1-joemarmoto-Email",
"org-dummyemail1-joemarmoto-PAT",
"org-dummyemail1-joemarmoto-PATName",
"org-dummyemail1-joemarmoto-PATValidTo"
$arr2 = $arr | Where-Object {$PSItem -match 'joemarmoto'}
$arr3 = $arr | Where-Object {$PSItem -match '123'}
请看这里:
从该网站:
获取有关自动变量的帮助-ShowWindow
在“查找”框中键入“psitem”以突出显示包含此单词的所有文本:
正如我们所看到的,$PSItem与$相同。引入$PSItem变量的目的是使包含“管道中的当前对象”的代码更易于阅读和理解
答案几乎与Gert Jan Kraijeveld相同,但解释了$PSItem的作用以及该信息的来源。使用$PSItem变量
$arr="org-dummyemail-123-AccountName",
"org-dummyemail-123-Email",
"org-dummyemail-123-PAT",
"org-dummyemail-123-PATName",
"org-dummyemail-123-PATValidTo",
"org-dummyemail1-joemarmoto-AccountName",
"org-dummyemail1-joemarmoto-Email",
"org-dummyemail1-joemarmoto-PAT",
"org-dummyemail1-joemarmoto-PATName",
"org-dummyemail1-joemarmoto-PATValidTo"
$arr2 = $arr | Where-Object {$PSItem -match 'joemarmoto'}
$arr3 = $arr | Where-Object {$PSItem -match '123'}
请看这里:
从该网站:
获取有关自动变量的帮助-ShowWindow
在“查找”框中键入“psitem”以突出显示包含此单词的所有文本:
正如我们所看到的,$PSItem与$相同。引入$PSItem变量的目的是使包含“管道中的当前对象”的代码更易于阅读和理解
答案几乎与Gert Jan Kraaijeveld相同,但解释了$PSItem的作用和信息来源。下面是一个使用正则表达式确定输入字符串的哪一部分分组的版本:
清除主机
'正则表达式1;org-dummeyemail-123 vs org-dummeyemail1-joemarmoto'
$groupedByAllButLast=@(
“org-dummeyemail-123-AccountName”,
“org-dummeyemail-123-Email”,
“org-dummeyemail-123-PAT”,
“org-dummeyemail-123-PATName”,
“org-dummeyemail-123-PATValidTo”,
“org-dummeyemail1-joemarmoto-AccountName”,
“org-dummeyemail1-joemarmoto-Email”,
“org-dummeyemail1-joemarmoto-PAT”,
“org-dummeyemail1-joemarmoto-PATName”,
“org-dummeyemail1-joemarmoto-PATValidTo”
)|组对象-属性@{E={$}-replace'([^-]+-[^-]+-[^-]+)-.','$1'}
对于([int]$i=0;$i-lt$groupedByAllButLast.Count;$i++)
{
写入详细的$groupedByAllButLast[$i]。名称-详细
$groupedByAllButLast[$i]。组
}
'正则表达式2;123对joemarmoto'
$groupedByTheNameOrEmailBit=@(
“org-dummeyemail-123-AccountName”,
“org-dummeyemail-123-Email”,
“org-dummeyemail-123-PAT”,
“org-dummeyemail-123-PATName”,
“org-dummeyemail-123-PATValidTo”,
“org-dummeyemail1-joemarmoto-AccountName”,
“org-dummeyemail1-joemarmoto-Email”,
“org-dummeyemail1-joemarmoto-PAT”,
“org-dummeyemail1-joemarmoto-PATName”,
“org-dummeyemail1-joemarmoto-PATValidTo”
)| Group Object-Property@{E={${U-替换'[^-]+-[^-]+-[^-]+-([^-]+)-.''$1'}}}}#我们所更改的只是这一行中左括号的位置
对于([int]$i=0;$i-lt$groupedByTheNameOrEmailBit.Count;$i++)
{
写入详细的$groupedByTheNameOrEmailBit[$i]。名称-详细
$groupedByTheNameOrEmailBit[$i]。组
}
注:这基本上是相同的方法;我们只使用正则表达式来捕获字符串中与密钥相关的所有部分,而不是使用
split
和获取单段。。。有关此有用函数的更多信息,请参阅。以下是一个使用正则表达式确定要分组的输入字符串的哪个部分的版本:
清除主机
'正则表达式1;org-dummeyemail-123 vs org-dummeyemail1-joemarmoto'
$groupedByAllButLast=@(
“org-dummeyemail-123-AccountName”,
“org-dummeyemail-123-Email”,
“org-dummeyemail-123-PAT”,
“org-dummeyemail-123-PATName”,
“org-dummeyemail-123-PATValidTo”,
“org-dummeyemail1-joemarmoto-AccountName”,
“org-dummeyemail1-joemarmoto-Email”,
“org-dummeyemail1-joemarmoto-PAT”,
“org-dummeyemail1-joemarmoto-PATName”,
“org-dummeyemail1-joemarmoto-PATValidTo”
)|组对象-属性@{E={$}-replace'([^-]+-[^-]+-[^-]+)-.','$1'}
对于([int]$i=0;$i-lt$groupedByAllButLast.Count;$i++)
{
写入详细的$groupedByAllButLast[$i]。名称-详细
$groupedByAllButLast[$i]。组
}
'正则表达式2;123对joemarmoto'
$groupedByTheNameOrEmailBit=@(
“org-dummeyemail-123-AccountName”,
“org-dummeyemail-123-Email”,
“org-dummeyemail-123-PAT”,
“org-dummeyemail-123-PATName”,
“org-dummeyemail-123-PATValidTo”,
“org-dummeyemail1-joemarmoto-AccountName”,
“org-dummeyemail1-joemarmoto-Email”,
“org-dummeyemail1-joemarmoto-PAT”,
“org-dummeyemail1-joemarmoto-PATName”,
“org-dummeyemail1-joemarmoto-PATValidTo”
)| Gr