标题: [问题求助] PowerShell按16进制数的大小排序并获取缺少的最小的16进制数 [打印本页]
作者: 小白龙 时间: 2023-9-10 21:11 标题: PowerShell按16进制数的大小排序并获取缺少的最小的16进制数
下面的两个示例, 每行中间是16进制数 我想将这些行,
按其中的16进制数的值由小到大排序,
最后输出缺少最小的16进制数,
如:示例1中, 缺少0x0001, 0x0002 ......, 最小的就是0x0001了, 那就先排序, 再输出0x0001
再如:示例2中, 缺少0x0002, 0x0004 ......, 最小的就是0x0002了, 那就先排序, 再输出0x0002- #示例1
- $s = @'
- 中 0x0003 国
- 日 0x0006 本
- 新加 0x000F 坡
- 南 0x0011 非
- 美 0x000A 国
- 澳大 0x0010 利亚
- '@
-
-
- #示例2
- $s = @'
- 中 0x0001 国
- 日 0x0003 本
- 新加 0x000F 坡
- 南 0x0011 非
- 美 0x000A 国
- 澳大 0x0010 利亚
- '@
复制代码
作者: Nsqs 时间: 2023-9-10 22:20
- $s = @'
- 中 0x0001 国
-
- 日 0x0003 本
-
- 新加 0x000F 坡
-
- 南 0x0011 非
-
- 美 0x000A 国
-
- 澳大 0x0010 利亚
- '@
-
- $str=($s -replace '(\r\n){2}',"`r`n" -split '\r\n')
- [System.Collections.Generic.Dictionary[int,string]]$coll=@{}
- $result=($str|sort{[int](($_ -split ' ')[1])})
-
- $result|%{$coll[((($_ -split ' ')[1]))]=$_}
- $rs=$result|%{($_ -split ' ')[1]}
- $min=$rs[0]
- $max=$rs[$rs.Count-1]
- $c=0;$min=foreach($i in $min..$max){
- if($coll.Keys -notcontains $i){$i;$c++}
- if($c -gt 0){break}
- }
- $coll.Add($min,'0x{0:x4}' -f $min)
- $coll.Values
复制代码
不知是不是这个意思呢?
作者: 小白龙 时间: 2023-9-10 22:41
回复 2# Nsqs
示例一, 期待结果如下:
中 0x0003 国
日 0x0006 本
美 0x000A 国
新加 0x000F 坡
澳大 0x0010 利亚
南 0x0011 非
0x0001
示例二, 期待结果如下:
中 0x0001 国
日 0x0003 本
美 0x000A 国
新加 0x000F 坡
澳大 0x0010 利亚
南 0x0011 非
0x0002
作者: Five66 时间: 2023-9-10 22:57
本帖最后由 Five66 于 2023-9-11 15:42 编辑
没有判断长度(默认为4),缺少以0x0001为准计算
之前想复杂了,已编辑
作者: Nsqs 时间: 2023-9-10 22:58
回复 3# 小白龙
你没运行吗?我写的不就是你结果一样吗
作者: 小白龙 时间: 2023-9-15 19:24
回复 5# Nsqs
不好意思, 刚回复, 试了一下, 结果如下, 不是我想要的结果:
中 0x0001 国
日 0x0003 本
新加 0x000F 坡
南 0x0011 非
美 0x000A 国
澳大 0x0010 利亚
0x0030
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |