使用clear()清空通用列表

时间:2017-12-30 15:36:50

标签: c# list

我有一个简单的整数列表,

original = new List<int>() { 3, 6, 12, 7, 7, 7, 7, 8, 10, 5, 5, 4 };

和整数的临时列表,

temp = new List<int>();

和列表清单

listOf = new List<List<int>>();

我希望将原始列表分成多个列表,我使用以下算法将循环值分配给列表temp,然后将指定的值推送到listOf,之后我清除列表temp以便我可以分配新值。

for (int i = 0; i < orginal.Count; i++) {
    if (orginal[i] > orginal[i + 1]) {
        for (int i2 = i + 1; i2 < orginal.Count; i2++) {
            if (orginal[i2] <= orginal[i2 + 1]) {
                listin.Add(orginal[i2]);
            } else {
                listOf.Add(listin);
                listin.Clear(); 
            }
        }
    }
}

想要的输出类似于:

listOf[0] = 7 7 7 7 8 10
listOf[1] = 5 5

我需要更改什么来实现此输出?

2 个答案:

答案 0 :(得分:3)

这是您的错误:

listOf.Add(listin);
listin.Clear();

您已将listin添加到listOf,然后立即将其清除。现在删除listOf内的任何内容,这不是您想要发生的内容。

相反,您应该将listin的“所有权”转移到listOf,并为自己创建一个全新的列表:

listOf.Add(listin);
listin = new List<int>();

答案 1 :(得分:-1)

试试以下内容。没有必要明确:

       static void Main(string[] args)
        {
            List<int> original = new List<int>() { 3, 6, 12, 7, 7, 7, 7, 8, 10, 5, 5, 4 };
            List<int> temp = null;

            while (original.Count > 0)
            {
                int count = 1;
                for(; (count < original.Count) && (original[count] >= original[count - 1]); count++);
                temp = original.Take(count).ToList();
                original = original.Skip(count).ToList();
            }
        }