sort.sl

来自「一个C格式的脚本处理函数库源代码,可让你的C程序具有执行C格式的脚本文件」· SL 代码 · 共 63 行

SL
63 行
字号
#! /usr/bin/env slsh% This program presents the solution to a problem posed by % Tom Christiansen <tchrist@mox.perl.com>.  The problem reads:%%    Sort an input file that consists of lines like this%%        var1=23 other=14 ditto=23 fred=2%%    such that each output line is sorted WRT to the number.  Order%    of output lines does not change.  Resolve collisions using the%    variable name.   e.g.%%        fred=2 other=14 ditto=23 var1=23 %%    Lines may be up to several kilobytes in length and contain%    zillions of variables.%---------------------------------------------------------------------------%% The solution presented below works by breaking up the line into an% array of alternating keywords and values with the keywords as the even% elements and the values as the odd.  It is about 30% faster than the % python solution.static variable Keys, Values;static define sort_fun (i, j){   variable s, a, b;   s = Values[i] - Values[j];   !if (s)     return strcmp (Keys[i], Keys[j]);   return s;}define main (){   variable line, len, i, vals;   foreach (stdin)     {	line = ();	line = strtok (line, " \t\n=");	len = length(line)/2;	if (len == 0)	  continue;	% Even elements are keys, odd are values	Keys = line[[0::2]];	vals = line[[1::2]];	Values = array_map(Int_Type, &integer, vals);		i = array_sort ([0:len-1], &sort_fun);	% There are different ways of writing the result.  Here is a 	% fast way that avoids a loop.	() = printf ("%s\n", strjoin (Keys[i] + "=" + vals[i], " "));     }}main ();

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?