帮助自定义函数hash = Function( {StringList},
{StringListItem,HashString},
For( StringListItem = 1, StringListItem <= Length( StringList ), StringListItem++,
StringList[StringListItem] = Char( Eval( Stringlist[StringListItem] ) )
);
HashString = Hex( Blob MD5( Char To Blob( Concat Items( StringList ) ) ) );
);这是我用来创建唯一 ID 的哈希函数。该函数当前采用一个列表作为它的参数。我想让它接受一个或多个用逗号分隔的参数。我希望将其添加到自定义功能中,并使其可供其他用户使用。认为如果它接受多个用逗号分隔的参数(如 Sum() 函数)对用户来说会更容易。
有什么想法吗?
非常感谢,
约翰
回复:帮助自定义功能非常感谢您的解决方案!回复:帮助自定义功能@约翰摩尔,
这是另一种变体@vince_faller和@txnelson的解决方案。
Names default to here(1);
hash = Function( {val1, val2=., val3=., val4=., val5=., val6=., val7=., val8=., val9=., val10=.},
{i, StringListItem,HashString},
if(IsList(val1), StringList = EvalList(val1),
StringList={};
For(i=1, i<=10,i++,
Eval( Parse(EvalInsert("If( !IsMissing(val^i^) & IsString(val^i^), InsertInto(StringList, val^i^))" ) ) )
);
);
//Show(StringList);
For( StringListItem = 1, StringListItem <= Length( StringList ), StringListItem++,
StringList[StringListItem] = Char( Eval( Stringlist[StringListItem] ) )
);
HashString = Hex( Blob MD5( Char To Blob( Concat Items( StringList ) ) ) );
);
x = "2";
y = "a";
z = "Expr(b)";
b = "another string";
hash(x,y,z);
l = {x, y, z};
show(hash(l), hash(x,y,z), hash( list(x,y,z) ) ); //produces the same result
您的用户需要一些文档/培训,最多可以输入 10 个字符串参数,如果超过 10 个则使用列表。
回复:帮助自定义功能它可能不是您正在寻找的东西,但如果它真的只是一个字符串列表,您可以只 evallist 。
使用列表最简单的无限未知参数。
Names default to here(1);
hash = Function( {StringList},
{StringListItem,HashString},
For( StringListItem = 1, StringListItem <= Length( StringList ), StringListItem++,
StringList[StringListItem] = Char( Eval( Stringlist[StringListItem] ) )
);
HashString = Hex( Blob MD5( Char To Blob( Concat Items( StringList ) ) ) );
);
different_hash = function({StringList},
StringList = Evallist(StringList);
Hex( Blob MD5( Char To Blob( Concat Items( StringList ) ) ) );
);
x = "2";
y = "a";
z = "Expr(b)";
b = "another string";
l = {x, y, z};
show(hash(l) == different_hash(l));回复:帮助自定义功能这是一种使用您的代码的方法,该方法允许输入一些较大的预设最大值,但您的散列函数的输入参数列表是可变的
hash = Function( {a, b = "", c = "", d = ""}, // e="",f=""...…...z="")
//{StringListItem,HashString},
StringList = {};
string# = 1;
varList = {"a", "b", "c", "d"}; // .........."z"
While( Eval( Parse( varlist[string#] ) ) != "",
Insert Into( stringList, Eval( Parse( varlist[string#] ) ) );
string# = string# + 1;
);
For( StringListItem = 1, StringListItem <= Length( StringList ), StringListItem++,
StringList[StringListItem] = Char( Eval( Stringlist[StringListItem] ) )
);
HashString = Hex( Blob MD5( Char To Blob( Concat Items( StringList ) ) ) );
);