Sort a list of object identifiers: Difference between revisions
Content added Content deleted
Alpha bravo (talk | contribs) (Added AutoHotkey) |
(+Sather) |
||
Line 2,117: | Line 2,117: | ||
"1.3.6.1.4.1.11150.3.4.0.1" |
"1.3.6.1.4.1.11150.3.4.0.1" |
||
]</pre> |
]</pre> |
||
=={{header|Sather}}== |
|||
<lang sather>class MAIN is |
|||
oid_lt (a, b: STR): BOOL is |
|||
as ::= a.cursor.split('.'); |
|||
bs ::= b.cursor.split('.'); |
|||
loop |
|||
na ::= #INT(as.elt!); |
|||
nb ::= #INT(bs.elt!); |
|||
if na /= nb then return na < nb; end; |
|||
end; |
|||
return as.size < bs.size; |
|||
end; |
|||
main is |
|||
sorter: ARR_SORT_ALG{STR, ARRAY{STR}}; |
|||
input: ARRAY{STR} := |"1.3.6.1.4.1.11.2.17.19.3.4.0.10", |
|||
"1.3.6.1.4.1.11.2.17.5.2.0.79", |
|||
"1.3.6.1.4.1.11.2.17.19.3.4.0.4", |
|||
"1.3.6.1.4.1.11150.3.4.0.1", |
|||
"1.3.6.1.4.1.11.2.17.19.3.4.0.1", |
|||
"1.3.6.1.4.1.11150.3.4.0"|; |
|||
sorted ::= input.copy; |
|||
sorter.sort_by(sorted, bind(oid_lt(_, _))); |
|||
#OUT+"unsorted:\n"; |
|||
loop #OUT+input.elt! + "\n"; end; |
|||
#OUT+"sorted:\n"; |
|||
loop #OUT+sorted.elt! + "\n"; end; |
|||
end; |
|||
end;</lang> |
|||
{{out}} |
|||
<pre> |
|||
unsorted: |
|||
1.3.6.1.4.1.11.2.17.19.3.4.0.10 |
|||
1.3.6.1.4.1.11.2.17.5.2.0.79 |
|||
1.3.6.1.4.1.11.2.17.19.3.4.0.4 |
|||
1.3.6.1.4.1.11150.3.4.0.1 |
|||
1.3.6.1.4.1.11.2.17.19.3.4.0.1 |
|||
1.3.6.1.4.1.11150.3.4.0 |
|||
sorted: |
|||
1.3.6.1.4.1.11.2.17.5.2.0.79 |
|||
1.3.6.1.4.1.11.2.17.19.3.4.0.1 |
|||
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.10 |
|||
1.3.6.1.4.1.11150.3.4.0 |
|||
1.3.6.1.4.1.11150.3.4.0.1 |
|||
</pre> |
|||
=={{header|Sidef}}== |
=={{header|Sidef}}== |