本页面由 Flash 保存计划 从 Internet Archive 存档还原 · 快照 2005-12-26 · 原址 http://flash8.net/teach/4462.htm ← Flash 保存计划

获取比较值在一串列表元素中所偏向的位置的函数

作者:子心   类型:闪吧BBS   来源:CFDP

  

函数功能:获取比较值在一串列表元素中所偏向的位置。
试例说明:假若论坛发帖数0-100帖爲初级会员、100-200爲进阶会员、200-300是中级会员、
300-500是高级会员、500-600是黄金会员。那麽这里会形成一个列表,即"100,200,300,500,600",
如果我们现在的发帖数爲120帖,那麽我们通过GetListBasePoint可计算出该用户的所属范围值是
在100这个级别。

该函数的应用范围主要针对于数字型列表的,本人在编写在线商城时诸如会员级别,多少金额
可赠送礼品等处都用及该函数,如果有何漏洞,请诸位及时与本人联系,谢谢。

<cfscript>function GetListBasePoint(List,NewListValue){    //先将基点设定爲列表,然后将对比值追加入列表,然后将列表进行昇幂排序,并取得追加值在列表中的位置,    //最后获取该位置前一位置的基点值       delimiter=",";    if (ArrayLen(arguments) eq 3){       delimiter = arguments[3];    }    //删除列表中重復值    list = ListDeleteDuplicates(list);          //如果新值在输入的列表里已经有,即:与某个具体点的基点值一样,那麽直接找到该基点    //否则将比较值插入列表,并对新列表进行昇幂排序,最后得到比较值在列表中的位置    //如果处列表中第一位,那麽就取第2位的值,如果处列表中最后一位,那麽就取倒数第二位的值    //如果处于中间位置,那麽就取前一位的值    if (ListFindNoCase(list,NewListValue,delimiter) neq 0){        MatchBasePoint =         ListGetAt(List,ListFindNoCase(list,NewListValue,delimiter),delimiter);    }else{        BasePointList = ListAppend(List,NewListValue,delimiter);        BasePointList = ListSort(BasePointList,"Numeric","asc",delimiter);        GetTotallingPos = ListFindNoCase(BasePointList,NewListValue,delimiter);                if (GetTotallingPos eq 1){           MatchBasePoint = ListGetAt(BasePointList,2,delimiter);        }else if(GetTotallingPos eq listLen(BasePointList,delimiter)){           MatchBasePoint =            ListGetAt(BasePointList,listLen(BasePointList,delimiter)-1,delimiter);        }else{           MatchBasePoint = ListGetAt(BasePointList,GetTotallingPos - 1,delimiter);      }    }           return MatchBasePoint;}    </cfscript>

示例:

<cfoutput>#GetListBasePoint("100,200,300,500,600","120")#</cfoutput>

输出结果:100

   责任编辑:uufeng    时间:2005年10月11日

正在加载评论...