JS C#字符串 判断 是否存在 indexof 方法谨慎使用

6 篇文章 0 订阅
文章讲述了在处理字符串列表时遇到的一个bug,由于滥用indexOf函数,导致数据去重逻辑错误,只保留了部分数据。作者提出了解决方案,包括使用新的list进行去重以及利用linq表达式进行去重,强调在适当情况下避免使用indexOf方法。
摘要由CSDN通过智能技术生成

最近在写代码的时候发现一个小bug,就是本来拿两条数据的,但是只拿了一条数据
最后发现是滥用 indexof 函数惹的锅

事情起源是我的代码有一个函数,将 list 的数据组成字符串并用逗号隔开。若是list的item 已经引用过的就不再进行引用。

 foreach (string stritem in strList)
 {
	if (strset.IndexOf(stritem ) == -1)
	{//若是有重复的引用一次即可
	      strset += stritem + ","; 
	}
}

但是那么巧那次两个数据分别是

ayss-tt-10
ayss-tt-1

本来显示的代码应该是 string str="ayss-tt-10,ayss-tt-1";,但是因为先拿了ayss-tt-10,str字符串就自然包含了ayss-tt-1.自然就没有拿到后面的数据,后面就自然有错误了

解决方法是进行代码优化,通过一个新的list进行去除,如下

//列表去重并获取
List<string> lotList= new List<string>();
 foreach (string stritem in strList)
 {
     if (lotList.Contains(stritem ))
     {//记得contains函数若是对象的话就判断的是地址
         continue;//去重
     }
     lotList.Add(stritem );
     strset+= stritem + ",";//最后获取的数据
 } 
}
 strset= strset.TrimEnd(new Char[] { ',' });//去掉最后的,

当然可以通过表达式对 list 进行去重后再进行获取的方法,这个更加推荐,js 和C# 都能使用

ist<User> nonDuplicateList2 =
users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i)
//nonDuplicateList2 是去重的函数

由于很多方法都能判断 字符串是否包含 某个字符串的方法,在可能的情况下尽量不要使用 indexof 方法了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值