Sort a list of object identifiers

From Rosetta Code
Revision as of 00:17, 8 July 2016 by Thundergnat (talk | contribs) (Markup fix.)
Sort a list of object identifiers is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

Sort by OID numbers.

OID - Object Identifiers are used in Network data These numbers can vary in length, and have a dot "." between them. The individual number can be of different number of digits also.

Example:

==========================

INPUT

@arrayOID = (

 ".1.3.6.1.4.1.11.2.17.19.3.4.0.10",
 ".1.3.6.1.4.1.11150.3.4.0.2",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.19",
 ".1.3.6.1.4.1.11150.3.4.0.1",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.22",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.2",
 ".1.3.6.1.4.1.11150.3.4.0.11",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.1",
 ".1.3.6.1.4.1.11.2.17.3773.0.2",
 ".1.3.6.1.4.1.11.2.17.19.2.0.79",
 ".1.3.6.1.4.1.11150.3.4.0.21",
 ".1.3.6.1.4.1.11.2.17.19.2.0.9",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.25",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.32",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.4",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.31",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.3",
 ".1.3.6.1.4.1.11.2.17.3773.0.1"

);

============================

OUTPUT - Correctly Sorted

  1. 01 | .1.3.6.1.4.1.11.2.17.19.2.0.9 |
  2. 02 | .1.3.6.1.4.1.11.2.17.19.2.0.79 |
  3. 03 | .1.3.6.1.4.1.11.2.17.19.3.4.0.1 |
  4. 04 | .1.3.6.1.4.1.11.2.17.19.3.4.0.2 |
  5. 05 | .1.3.6.1.4.1.11.2.17.19.3.4.0.3 |
  6. 06 | .1.3.6.1.4.1.11.2.17.19.3.4.0.4 |
  7. 07 | .1.3.6.1.4.1.11.2.17.19.3.4.0.10 |
  8. 08 | .1.3.6.1.4.1.11.2.17.19.3.4.0.19 |
  9. 09 | .1.3.6.1.4.1.11.2.17.19.3.4.0.22 |
  10. 10 | .1.3.6.1.4.1.11.2.17.19.3.4.0.25 |
  11. 11 | .1.3.6.1.4.1.11.2.17.19.3.4.0.31 |
  12. 12 | .1.3.6.1.4.1.11.2.17.19.3.4.0.32 |
  13. 13 | .1.3.6.1.4.1.11.2.17.3773.0.1 |
  14. 14 | .1.3.6.1.4.1.11.2.17.3773.0.2 |
  15. 15 | .1.3.6.1.4.1.11150.3.4.0.1 |
  16. 16 | .1.3.6.1.4.1.11150.3.4.0.2 |
  17. 17 | .1.3.6.1.4.1.11150.3.4.0.11 |
  18. 18 | .1.3.6.1.4.1.11150.3.4.0.21 |


Perl

<lang perl>

  1. !/usr/bin/perl
      1. --------------------------
      2. Sort: -OID - Numeric
      3. Bert Mariani 2016-07-07
      4. --------------------------

@arrayOID = () ; @arrayOIDSorted = () ;

@arrayOID = (

 ".1.3.6.1.4.1.11.2.17.19.3.4.0.10",
 ".1.3.6.1.4.1.11150.3.4.0.2",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.19",
 ".1.3.6.1.4.1.11150.3.4.0.1",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.22",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.2",
 ".1.3.6.1.4.1.11150.3.4.0.11",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.1",
 ".1.3.6.1.4.1.11.2.17.3773.0.2",
 ".1.3.6.1.4.1.11.2.17.19.2.0.79",
 ".1.3.6.1.4.1.11150.3.4.0.21",
 ".1.3.6.1.4.1.11.2.17.19.2.0.9",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.25",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.32",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.4",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.31",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.3",
 ".1.3.6.1.4.1.11.2.17.3773.0.1"

);

### One big long line ... made readable
@arrayOIDSorted =                                                       
        map { $_->[0] }                                                     
              sort { $a->[1] cmp $b->[1] }                                    
                     map { [ $_,                                                  
                             join , map { sprintf("%8d",$_) } 
                             split( /\./, $_) 
                           ] 
                         } 
                     @arrayOID;      


   print "\nAfter OID Sort \n\n";
   $ptrN  = 0;   
   $entry = 1;
   while ( $arrayOIDSorted[$ptrN] )
   { 
      print "$entry | $arrayOIDSorted[$ptrN] |\n" ;
      $entry++;
      $ptrN++;
   }
   print "\nEnd OID Sort \n\n";
                          
      1. =========================================
  1. After OID Sort
  2. 1 | .1.3.6.1.4.1.11.2.17.19.2.0.9 |
  3. 2 | .1.3.6.1.4.1.11.2.17.19.2.0.79 |
  4. 3 | .1.3.6.1.4.1.11.2.17.19.3.4.0.1 |
  5. 4 | .1.3.6.1.4.1.11.2.17.19.3.4.0.2 |
  6. 5 | .1.3.6.1.4.1.11.2.17.19.3.4.0.3 |
  7. 6 | .1.3.6.1.4.1.11.2.17.19.3.4.0.4 |
  8. 7 | .1.3.6.1.4.1.11.2.17.19.3.4.0.10 |
  9. 8 | .1.3.6.1.4.1.11.2.17.19.3.4.0.19 |
  10. 9 | .1.3.6.1.4.1.11.2.17.19.3.4.0.22 |
  11. 10 | .1.3.6.1.4.1.11.2.17.19.3.4.0.25 |
  12. 11 | .1.3.6.1.4.1.11.2.17.19.3.4.0.31 |
  13. 12 | .1.3.6.1.4.1.11.2.17.19.3.4.0.32 |
  14. 13 | .1.3.6.1.4.1.11.2.17.3773.0.1 |
  15. 14 | .1.3.6.1.4.1.11.2.17.3773.0.2 |
  16. 15 | .1.3.6.1.4.1.11150.3.4.0.1 |
  17. 16 | .1.3.6.1.4.1.11150.3.4.0.2 |
  18. 17 | .1.3.6.1.4.1.11150.3.4.0.11 |
  19. 18 | .1.3.6.1.4.1.11150.3.4.0.21 |
  20. End OID Sort
  21. ===========================================

</lang>