我有一个整数列表,我想搜索一个序列。
例如,如果我有一个主列表: 1,2,3,4,9,2,39,482,19283,19,23,2,29
我想找到序列: 1,2,3,4
我想用一些简单的方法来填充子列表: 1,2,3,4 +主列表中接下来的五个整数
然后从主列表中删除子集列表中的整数,这样在操作结束时,我的列表将如下所示:
主列表: 19,23,1,29
子集列表: 1,2,3,4,9,2,39,482,19283
希望这是有道理的。我猜也许LINQ会对这样的东西有好处,但我以前从未使用它。有人可以帮忙吗?
答案 0 :(得分:2)
您可以从编写可以在列表中找到子列表的函数IndexOfSublist
开始。之前已经多次询问过这个问题。
假设您已实施IndexOfSublist
,请使用它来查找结果的第一个元素,然后您可以使用GetRange
选择要保留的元素,然后RemoveRange
从原始列表中删除元素。
List<int> l = new List<int> { 1, 1, 2, 3, 4, 9, 2, 39, 482, 19283, 19, 23, 1, 29 };
List<int> needle = new List<int> { 1, 2, 3, 4 };
int i = indexOfSubList(l, needle);
if (i != -1)
{
// TODO: What should we do if there are fewer than four
// elements left after the needle? Currently we just throw.
List<int> result = l.GetRange(i, needle.Count + 4);
l.RemoveRange(i, result.Count);
// TODO: Do something with the result;
}
答案 1 :(得分:0)
<强> HINT 强>
你可以尝试这样的东西以及迭代器:
List<int> n = new List<int>() { 1, 2, 3, 4, 9, 2, 39, 482, 19283, 19, 23, 1, 29 };
List<int> toFind = new List<int>() { 1, 2, 3, 4 };
if (n.Skip(indextostart).Take(4).ToList()==toFind)
{
n.RemoveRange(indextostart,4);
}