100分求:二维数组的最大值,星级高手请进!正确答案立刻揭贴!

lawdoor 2004-04-02 11:53:25
用户表(user):
user_id groups
1 2,3,4,8,11,.....,9,
模块权限表(part_right)
part_id group_right
4 4,2;5,2;7,4;11,5; (组ID,组权限;)

现在我想想实现的是:
如何取得用户ID为1的用户,所属组中在模块为4的权限的最大值,并输出这个数组和权限值!
...全文
67 点赞 收藏 38
写回复
38 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cjf1009 2004-04-03
再学习一下。
回复
opolmzy 2004-04-02
dim id
id=split(rs("group_right"),';')

id_d=split(id,',')

先这么取出来,然后再排序就OK了 最大的在最上面的

回复
51windows 2004-04-02
用户名中的groups的每一页是对应的模块权限表中的part_id吗?

模块权限表中的group_right中的,和;是分隔什么的?

是要取出11,5吗?是按11最大,还是5最大?
回复
xxrl 2004-04-02
同意 inelm(木野狐)的观点,什么算法不算法的,要我说3重循环还更加有清晰的思路呢,至于算法,我看不用考虑,因为后期的算法的复杂度要看前期的数据库设计情况,照楼主这种权限设置,后期一定要受一定的限制,我看应该采用大小权限来控制,大权限来控制模块的进入权限,小权限来控制模块内部的add,del,modify....权限!
回复
kining 2004-04-02
哈。。一儿工夫就。。:)
回复
51windows 2004-04-02
两步走

<SCRIPT LANGUAGE="VBScript">
<!--
function getarr(thestr,str)
strarr = split(str,";")
tempstr = ""
for i=0 to ubound(strarr)
if instr(strarr(i),",") then
if instr(","&thestr&",",","&split(strarr(i),",")(0)&",")>0 then
tempstr = tempstr&strarr(i)&";"
end if
end if
next
getarr = tempstr
end function

function getMaxarr(str)
strarr = split(str,";")
tempn = 0
tempstr = ""
for i=0 to ubound(strarr)
if instr(strarr(i),",") then
if int(split(strarr(i),",")(1))>tempn then
tempn = int(split(strarr(i),",")(1))
tempstr = strarr(i)
end if
end if
next
getMaxarr = tempn
end function
msgbox getMaxarr(getarr("1,2,5,6,11,","2,3;5,3;12,3;13,3;8,5;6,3;11,2;10,2;1,4;"))
//-->
</SCRIPT>
回复
nchen123 2004-04-02
纠缠于 asp 页面里面来解决这个问题是没意义的,应该重新考虑数据库设计, 楼主!
回复
bingbingcha 2004-04-02
好东西。。学习一下
回复
xxrl 2004-04-02
<%
'一个字符串:2,5,6,11,
'另一个是这样的:2,3;5,3;12,3;13,3;8,5;6,3;11,2;10,2;1,4;
'如何取出:2,3;5,3;6,3;11,2;
Function GetUserPermission(UserID,Permission)
dim ArrayForOneStr,ArrayForTwoStr,strForResult
dim i,j
i = 0
j = 0
strForResult = ""
ArrayForOneStr = ","&UserID
ArrayForTwoStr = split(Permission,";")
for i = 0 to ubound(ArrayForTwoStr)
if instr(1,ArrayForTwoStr(i),",") then
if instr(1,ArrayForOneStr,","&split(ArrayForTwoStr(i),",")(0)&",") then
strForResult = strForResult & split(ArrayForTwoStr(i),",")(1) & ";"
end if
end if
next
GetUserPermission = mid(strForResult,1,len(strForResult)-1)
End Function

OneStr = "2,5,6,11,"
TwoStr = "2,3;5,3;12,3;13,3;8,5;6,3;11,2;10,2;1,4;"

response.Write GetUserPermission(OneStr,TwoStr)
%>
回复
lawdoor 2004-04-02
'一个字符串a:1,2,5,6,11,
'另一个是这样的b:2,3;5,3;12,3;13,3;8,5;6,3;11,2;10,2;1,4;
刚才我们做的是取出1,4;
能不能一步到位:
如何取出含有字符串a的,在b中最高权限值:4
我又给大家出难题了,呵呵!
回复
pizixt 2004-04-02
两重循环的 inelm(木野狐) 的行,结果按Group排序
一重循环的 51windows(海娃)的行,结果按group_right排序
海娃的想法还是很巧的
回复
51windows 2004-04-02
这样可以了吧?

2,3,4=》,2,3,4,

3,=>,3,

instr(",2,3,4,",",3,")
回复
lawdoor 2004-04-02
xxrl(孔曰成仁,孟曰取E)
不要着急,俺等着您的大作呢!
回复
nchen123 2004-04-02
返回值
InStr 函数返回以下值:

如果 InStr 返回
string1 为零长度 0
string1 为 Null Null
string2 为零长度 start
string2 为 Null Null
string2 没有找到 0
在 string1 中找到 string2 找到匹配字符串的位置
start > Len(string2) 0
回复
nchen123 2004-04-02
是的。
我认为海娃判定字符串是否在另一个里面的方法欠妥。

if instr("aaaaaffsdfsd", "f") then
这样判定, 那么即使在中间出现的匹配, 都会判定为 true
因为 if 的判定条件是 -1 或者正整数数都为 true
严格点应该这样写:
if instr("aaaaaffsdfsd", "f") = 1 then
回复
lawdoor 2004-04-02
好!俺先不揭贴,大家讨论一下吧!也可以将两个函数合成一个更好了!
我的可用分剩下20分了,谁捐赠给俺点,我将帖子猛加分吧!以酬谢各位高手!!!
反正高手都来了,正好讨论个代码最短,执行效率最好的程序!
回复
xxrl 2004-04-02
51windows(海娃) 你一开始贴出来的代码没有考虑1,和11,的那种

不是优化,是修正,呵呵
回复
51windows 2004-04-02
大家可以优化一下代码啊

一次循环
2,3,4=》,2,3,4,

3,=>,3,

instr(",2,3,4,",",3,")
回复
xxrl 2004-04-02
51windows(海娃) 的好像不正确
回复
lawdoor 2004-04-02
高手!高手。
俺今天算是见识了,谢谢海娃、木野狐!连斑竹也惊动了,谢谢
我提议让 51windows做斑竹!当之无愧!
论坛是不是应该有个加为好友功能,也知道在线不在线呀?你们说呢
谢谢各位!揭贴!·
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告