c# -在数组中搜索序列
本文关键字:搜索 数组 | 更新日期: 2023-09-27 18:16:23
我有一些用1和0填充的数组。是否有简单的方法来找到,例如,10个字段相邻的值为1?
类似于:if (array[i…]我+10]= 1)->做一些事情?
我知道我可以用for
来做,但我有一个巨大的多重数组,这将非常有用。
使用for循环很容易做到这一点:
int c = 0;
for (int i = 0; i < myArray.Length; i++)
{
c = (myArray[i] == 1) ? c + 1 : 0;
if (c >= 10)
{
// do stuff
}
}
下面是使用Linq的另一种方法:
var indexes =
from i in Enumerable.Range(0, myArray.Length - 10)
where myArray.Skip(i).Take(10).All(x => x == 1)
select i;
foreach(var i in indexes)
{
// do stuff
}
这将返回myArray
的所有索引,其中该索引处的元素和后面9个索引的元素都等于1。然而,这种方法的效率比简单的for循环要低一些,因为它可能会对每一项检查不止一次。
如果你喜欢流畅的语法:
var indexes = Enumerable.Range(0, myArray.Length - 10)
.Where(i => myArray.Skip(i).Take(10).All(x => x == 1));
foreach(var i in indexes)
{
// do stuff
}
如果我没理解错的话,你是想做模式匹配。
有很多算法。第一个起点是这个页面
Turbo-Boyer-Moore算法是性能最好的算法之一。
但是你也可以用数据结构来处理这个问题,比如后缀树:请参阅这篇关于后缀树(或简称为Trie)的文章
这是Boyer-Moore算法的代码项目文章