有个模板数组A:string[] tenmNum=new string[]{"北京","上海","广州"}
还有个上传文件名数组B: string[] fileName; (格式可能为 “我爱北京.txt”,“我爱广州.txt”),这样"我爱北京.txt"元素在A中找到模板"北京",代表合格
现在我需要判断 数组B 中的所有filename都包含A中的任一元素 且一一对应,目前已判断出两个数组的元素个数一样,只要求B中每个元素在A中能找到对应的模板(包含关系)
例如 B中是 "我爱北京.txt"和"我爱北广.txt" 和“我爱广州.txt”则不合格
B中是 "我爱北京.txt"和"XX我爱上海广12贾斯丁.txt" 和“我爱广州.txt”则合格
求帮忙写个方法:
protect string juge(){
// if 不合格
return 不合格
}
TKS!
呵呵,我给个笨办法,大家后好的,继续:
protect string juge()
{
var included = false; // 刚开始设置包含标识为false
foreach(var f in fileName){ // 循环fileName
foreach(var t in tenmNum){ // 循环tenmNum
if(t.indexOf(t) >= 0){ // 取其中的一个fileName进行对比
included = true; // 如果包含就设置include为true并跳出内部循环
break;
}
}
if(included == true){ // 如果包含标识为true就跳出外部循环
break;
}
}
return included; // 返回包含标志
}
谢谢回复,不过你这个方法貌似只要有一个符合就会跳出循环,不能全部都判断,你看能再改下嘛
public bool juge()
{
bool result = true;//默认不合格
string[] tenmNum={"北京","上海","广州"};
string[] fileName = { "北京.txt", "北京.txt", "北京.txt" };
foreach (var ten in tenmNum)
{
int count = 0;
foreach (var file in fileName)
{
if (file.Contains(ten))
{
count += 1;
if (count > 1) break;//大于1次后,就没有必要继续遍历下去
}
}
if (count>1)//出现两次以上,则代表不是一一对应,立即跳出循环
{
result = false;
break;
}
}
return result;
}
请及时采纳!谢谢!
你的“一一对应”是指数据的下标也要匹配吗?
protect string juge(){ string result="合格"; for(int i=0;i<tenmNum.Length;i++){ if(!fileName[i].Contains(tenmNUm[i])){ result="不合格"; break; } } }
那倒不用,下表对应的话,你这方法就OK了, 算法目的是为了 证明 存在,即模板规定的文件名在 上传时一定要都有,且上传的文件的文件名与模板文件名是包含关系
@风醉飘: 下标不对应的话,两次循环即可~
最后还是结合数据库查询解决了,以后类似问题也可以使用 lingq 去筛选
1 string[] numbers = item_templa.attachment_title.Trim().Split('|'); 2 3 foreach (var item in numbers) 4 { 5 string sqlatt = string.Format(" where task_no={0} and filename_old like '%" + item + "%'", item_curtask.rec_no); 6 IList<workflow_attachment> wfAttach = workflow_attachmentHelper.Select(sqlatt); 7 if (wfAttach.Count > 0) 8 { 9 return "true"; 10 } 11 else 12 { 13 14 return "上传的附件没有完全包含模板规定!"; 15 } 16 17 18 } 19 return "true"; 20 } 21 else { 22 23 return "true"; 24 }