Sort a list of object identifiers: Difference between revisions

no edit summary
m (→‎{{header|REXX}}: added the REXX language.)
No edit summary
Line 95:
<pre>
# 01 | .1.3.6.1.4.1.11.2.17.19.2.0.9 |
# 02 | .1.3.6.1.4.1.11.2.17.19.2.0.79 |
# 03 | .1.3.6.1.4.1.11.2.17.19.3.4.0.1 |
# 04 | .1.3.6.1.4.1.11.2.17.19.3.4.0.2 |
# 05 | .1.3.6.1.4.1.11.2.17.19.3.4.0.3 |
# 06 | .1.3.6.1.4.1.11.2.17.19.3.4.0.4 |
# 07 | .1.3.6.1.4.1.11.2.17.19.3.4.0.10 |
# 08 | .1.3.6.1.4.1.11.2.17.19.3.4.0.19 |
# 09 | .1.3.6.1.4.1.11.2.17.19.3.4.0.22 |
# 10 | .1.3.6.1.4.1.11.2.17.19.3.4.0.25 |
# 11 | .1.3.6.1.4.1.11.2.17.19.3.4.0.31 |
# 12 | .1.3.6.1.4.1.11.2.17.19.3.4.0.32 |
# 13 | .1.3.6.1.4.1.11.2.17.3773.0.1 |
# 14 | .1.3.6.1.4.1.11.2.17.3773.0.2 |
# 15 | .1.3.6.1.4.1.11150.3.4.0.1 |
# 16 | .1.3.6.1.4.1.11150.3.4.0.2 |
# 17 | .1.3.6.1.4.1.11150.3.4.0.11 |
# 18 | .1.3.6.1.4.1.11150.3.4.0.21 |
</pre>
 
=={{header|Haskell}}==
<lang Haskell>import Data.List ( sortBy , intercalate )
 
oid :: [String]
oid = [".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" ]
 
splitString :: Char -> String -> [String]
splitString c [] = []
splitString c s = let ( item , rest ) = break ( == c ) s
( _ , next ) = break ( /= c ) rest
in item : splitString c next
 
convertIntListToString :: [Int] -> String
convertIntListToString list = intercalate "." $ map show list
 
orderOID :: [String]
orderOID = map (\intlist -> convertIntListToString intlist ) $ sortBy myCriterion numberlists
where
numberlists = map (\list -> map read $ tail list ) $ map (\myS -> splitString '.' myS ) oid
myCriterion :: [Int] -> [Int] -> Ordering
myCriterion a b = (\(x,y) -> compare x y ) $ head $ filter (\p -> fst p /= snd p ) $ zip a b
 
outputLine :: Int -> String -> IO ( )
outputLine counter s = do
putStr "# "
if counter < 10 then putStr ("0" ++ show counter )
else putStr ( show counter )
putStr " | ."
putStr s
putStrLn " |"
 
main :: IO ( )
main = do
let pairs = zip orderOID [1..length orderOID]
mapM_ (\p -> outputLine (snd p) (fst p) ) pairs</lang>
 
{{out}}
<pre># 01 | .1.3.6.1.4.1.11.2.17.19.2.0.9 |
# 02 | .1.3.6.1.4.1.11.2.17.19.2.0.79 |
# 03 | .1.3.6.1.4.1.11.2.17.19.3.4.0.1 |
260

edits