Board logo

标题: [问题求助] 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. #示例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. '@
复制代码

作者: Nsqs    时间: 2023-9-10 22:20

  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
复制代码
不知是不是这个意思呢?
作者: 小白龙    时间: 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