[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] PowerShell按16进制数的大小排序并获取缺少的最小的16进制数

下面的两个示例, 每行中间是16进制数 我想将这些行,
按其中的16进制数的值由小到大排序,
最后输出缺少最小的16进制数,
如:示例1中, 缺少0x0001, 0x0002 ......, 最小的就是0x0001了, 那就先排序, 再输出0x0001
再如:示例2中, 缺少0x0002, 0x0004 ......, 最小的就是0x0002了, 那就先排序, 再输出0x0002
  1. #示例1
  2. $s = @'
  3. 中 0x0003 国
  4. 日 0x0006 本
  5. 新加 0x000F 坡
  6. 南 0x0011 非
  7. 美 0x000A 国
  8. 澳大 0x0010 利亚
  9. '@
  10. #示例2
  11. $s = @'
  12. 中 0x0001 国
  13. 日 0x0003 本
  14. 新加 0x000F 坡
  15. 南 0x0011 非
  16. 美 0x000A 国
  17. 澳大 0x0010 利亚
  18. '@
复制代码

  1. $s = @'
  2. 中 0x0001 国
  3. 日 0x0003 本
  4. 新加 0x000F 坡
  5. 南 0x0011 非
  6. 美 0x000A 国
  7. 澳大 0x0010 利亚
  8. '@
  9. $str=($s -replace '(\r\n){2}',"`r`n" -split '\r\n')
  10. [System.Collections.Generic.Dictionary[int,string]]$coll=@{}
  11. $result=($str|sort{[int](($_ -split ' ')[1])})
  12. $result|%{$coll[((($_ -split ' ')[1]))]=$_}
  13. $rs=$result|%{($_ -split ' ')[1]}
  14. $min=$rs[0]
  15. $max=$rs[$rs.Count-1]
  16. $c=0;$min=foreach($i in $min..$max){
  17.     if($coll.Keys -notcontains $i){$i;$c++}
  18.     if($c -gt 0){break}
  19. }
  20. $coll.Add($min,'0x{0:x4}' -f $min)
  21. $coll.Values
复制代码
不知是不是这个意思呢?

TOP

回复 2# Nsqs


示例一, 期待结果如下:
中 0x0003 国
日 0x0006 本
美 0x000A 国
新加 0x000F 坡
澳大 0x0010 利亚
南 0x0011 非
0x0001

示例二, 期待结果如下:
中 0x0001 国
日 0x0003 本
美 0x000A 国
新加 0x000F 坡
澳大 0x0010 利亚
南 0x0011 非
0x0002

TOP

本帖最后由 Five66 于 2023-9-11 15:42 编辑

没有判断长度(默认为4),缺少以0x0001为准计算
之前想复杂了,已编辑

TOP

回复 3# 小白龙


    你没运行吗?我写的不就是你结果一样吗

TOP

回复 5# Nsqs

不好意思, 刚回复, 试了一下, 结果如下, 不是我想要的结果:

中 0x0001 国

日 0x0003 本

新加 0x000F 坡

南 0x0011 非

美 0x000A 国

澳大 0x0010 利亚
0x0030

TOP

返回列表