我有一个列表框,其中大约有10个项目。现在我在顶部(两个以上)选择几个项目,在中间选择一些项目。我想创建一个列表,其中包含这两个不同选择中连续选择的项目的最大数量。也就是说,如果顶部的选定项目数量少于中间几个选定项目的数量,则顶部的少数项目应该转到列表中。怎么做?我已经检查了连续性,如下所示:
for (int i = 0; i < lb.SelectedIndices.Count - 1; i++)
{
if (lb.SelectedIndices[i] < lb.SelectedIndices[i + 1] - 1)
return false;
return true;
}
答案 0 :(得分:0)
只需跟踪当前子序列的长度,当您遇到不按顺序的索引时,请检查到目前为止看到的最长的连续子序列。
var indices = lb.SelectedIndices;
int count = 0;
int max = 0;
int first = -1;
for (int i = 0; i < indices.Count; i++)
{
++count;
if (i == indices.Count - 1 || indices[i] + 1 != indices[i + 1])
{
if (count > max)
{
max = count;
first = i - count + 1;
}
count = 0;
}
}
// max is the longest consecutive subsequence
// first is its starting index