C#问题,效率最大化,坐等大神来破。

Stephen_qin 2014-12-04 10:10:20
现有泛型List<string> lstXml =new List<string>,lstXml里有500万个值,其中有10个正确的xml格式,怎么 [高效率] 的 找出/判断 这10个xml的索引位置。

抛异常的方式就不要说了,要高效率。

这个算法该咋个写呀,大神来破。
...全文
446 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
bwangel 2014-12-05
  • 打赏
  • 举报
回复
这种破问题也置 顶,浪费时间。建议bz要严格把关。
卧_槽 2014-12-05
  • 打赏
  • 举报
回复
有你讨论的这5个钟头,估计100w的数据已经判断完了。
黑子大哥 2014-12-04
  • 打赏
  • 举报
回复
顶一下顶一下顶一下顶一下
枫0子K 2014-12-04
  • 打赏
  • 举报
回复
如果数量级是500万,加try.catch 肯定要蛋疼. 这个数量级如果不用多线程谈 效率也是 扯淡. 可不可以往索引表,Map等方向想. 像跑解密一样.
lkhuge 2014-12-04
  • 打赏
  • 举报
回复
如果List里的xml字符串错误原因一致的话倒是可以针对这个错误原因进行检查 但是如果错误原因不确定或者错误种类比较多的话,LoadXML() 然后捕获异常的方式反而效率会比较高 而且检查效率也与XML字符串的长度有关
烈火蜓蜻 2014-12-04
  • 打赏
  • 举报
回复
这个我觉的肯定不是这么弄的,你肯定要把合法的另外存,而过滤这个合法的XML的过程,注定高效不了。
於黾 2014-12-04
  • 打赏
  • 举报
回复
话说,你的list里的数据到底哪来的,不是你自己放进去的吗,放进去之前先判断一下,如果是xml,放到另一个list里,不好吗 无脑add进去,过后又找,太没效率了
於黾 2014-12-04
  • 打赏
  • 举报
回复
即使你有其他办法能够直接判断字符串是否合法(比如用正则自己去慢慢匹配),从500万乱七八糟的数据里遍历一遍就已经很没有效率了
Stephen_qin 2014-12-04
  • 打赏
  • 举报
回复
引用 4 楼 wangjun8868 的回复:
首先 怎么的判断是不是XML格式就是个问题
对呀,说个半天,就是这问题鄙人没有太好的解决方案,这不,来csdn求助各位经验丰富的大神呢。
编程有钱人了 2014-12-04
  • 打赏
  • 举报
回复
首先 怎么的判断是不是XML格式就是个问题
Stephen_qin 2014-12-04
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
这个问题就好像在问: 垃圾场里有500万个塑料袋,里面装的都不知道是什么垃圾,但是其中10个里面装的是鸡蛋,怎么样能够有效率的把它们找出来 最好的办法就是一开始就不要把鸡蛋扔进垃圾场里去
也就是这问题无解哦? xml是有规律的字符串,除了抛异常,必定还是有其他算法能快速找出来哦。
於黾 2014-12-04
  • 打赏
  • 举报
回复
这个问题就好像在问: 垃圾场里有500万个塑料袋,里面装的都不知道是什么垃圾,但是其中10个里面装的是鸡蛋,怎么样能够有效率的把它们找出来 最好的办法就是一开始就不要把鸡蛋扔进垃圾场里去
於黾 2014-12-04
  • 打赏
  • 举报
回复
话说,这个需求挺蛋疼,为什么把那么多乱七八糟的字符串都存到一个list里去 如果你完全不知道其他字符串到底有可能是什么,不抛异常还能怎么办,自己正则判断吗,效率更低
puler 2014-12-04
  • 打赏
  • 举报
回复
引用 20 楼 luo18273197110 的回复:
我会告诉你我做过list里面有1000多万的数据的模糊搜索吗?最后哥写了一个多线程的分段搜索解决了。
我觉得多线程分段这思路OK
zjlme 2014-12-04
  • 打赏
  • 举报
回复
只能先分批过滤,按照XML格式头比对
luo18273197110 2014-12-04
  • 打赏
  • 举报
回复
我会告诉你我做过list里面有1000多万的数据的模糊搜索吗?最后哥写了一个多线程的分段搜索解决了。
於黾 2014-12-04
  • 打赏
  • 举报
回复
用try,catch捕获异常,虽然效率最低,但是除了能够验证结构是否缺失,还能验证每一项类型是否正确,就是是否能真正以xml的方式读取出来数据
於黾 2014-12-04
  • 打赏
  • 举报
回复
这个就跟排序算法没有所谓最好最快一样,对于不同的数据,同样的算法效率也不见得一样 比如如果错误数据是固定缺失了最后的>,其实字符串判断最后是不是>就行了,这样是最快的, 但是对于其他类型的错误,这个算法就无能为力了 而从头到尾检查每一项是否合法,必然是效率比较低的算法,但是也是适应性最强的算法
  • 打赏
  • 举报
回复
除了多开几个线程,如何判断是否是xml还是用微软现成的通过字符串加载xml方法,通过try catch来判断是否正确
Stephen_qin 2014-12-04
  • 打赏
  • 举报
回复
引用 14 楼 caozhy 的回复:
我们假设你的错误的xml中任何地方都可能有错,比如最后一个标记的>没有封闭,有一种不回溯检测xml是否正确的算法。 那么显然对于list的每个成员,都必须完整读取一次才可以判断。
对,非常对,但就差这么一个算法,算法的不同,效率也各有千秋。
加载更多回复(6)

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧