【发布时间】:2010-08-24 23:23:56
【问题描述】:
使用 LINQ 在IEnumerable<T> 中查找序列的最有效方法是什么
我希望能够创建一个允许以下调用的扩展方法:
int startIndex = largeSequence.FindSequence(subSequence)
匹配必须相邻且有序。
【问题讨论】:
-
largeSequence 有多大?这是实际使用还是概念性的?因为我可以想到几种方法,它们在相对较小(几千)的记录上会很好,但不一定很漂亮或在更大的环境中工作。
-
我更喜欢可以很好地适应大序列的东西,实际的应用程序很小(只有几百个元素)但是它将进入我们的实用程序类,因此可以用于更大的序列未来。
-
您希望 FindSequence 返回什么?索引?真假?子序列?要匹配的元素是否都必须有序且相邻?
-
@richard 我已经更新了问题以澄清
-
是的,顺序和邻接的问题使它成为字符串搜索的概括。如果您不再将字符串视为固有地基于特定的 char 类型(在某些语言中它们不是),那么字符串与任何其他集合之间的主要实际区别之一是对集合进行排序往往使其至少同样有用如果不是更多,但对字符串进行排序会使其无用(“hello world”!=“dehllloorw”)。相关地,子序列和子字符串本质上是相同的操作。