放置列表的最后10个元素<>进入其他列表<>

时间:2015-03-25 12:57:02

标签: c# list sorting collections

我有一个列表<&gt ;,填充了我班级的对象。那个工作正常。 现在我想将最后10个元素加载到新列表<&gt ;,这是颠倒排序的。所以最后一个元素将是新List<>的第一个元素。第10个将是新列表中的最后一个<>。

通常这不应该是一项艰巨的任务,但我不知道......它以正确的方式进行迭代,并且在我看来应该有效。

Both Lists<> are Lists<lastChanges>. lastChange is my class.

这是我现在得到的:

        // x represents the amount of elements for the new List<>
        int x = 10;

        // elems is the old list. if it contains less than 10 elements,
        // x should be the amount instead of 10
        if (elems.Count < 10)
        {
            x = elems.Count;
        }

        // The start-index is made by elems.Count -> 10 Items -> the 10th item
        // would get the index '9'
        // as long as i is greater than the amount of the large List<>
        // minus the wanted amount for the new List<>
        // the loop is going to repeat
        for (int i = elems.Count-1; i > elems.Count - x; i--)
        {
            // lastChanges is my class which both Lists are filled with
            lastChanges lastArt = elems[i];
            if (lastArt != null)
            {
                items.Add(lastArt);
            }              
        }

我错过了什么?我真的不认为我还是一个初学者(当然要改进很多),但我在这里找不到错误...

例如:

elems-List确实包含2个元素, 然后x等于2。 for循环将开始:

for(int i=1;i>0;i--)

所以循环会运行两次。

在第一轮比赛中,将会出现#lastce&#39;设置等于&#39; elems&#39;的第二个对象而不是被添加到&#39;项目,

在第二次运行中,第一项将添加到&#39;项目&#39;。

因此,这两个项目都会添加到&#39;项目中,一切都很好。

但为什么我一直都会收到错误? 两个对象都是definetely!= null ...

谢谢!

编辑:

我总是得到一个&#39; NullReferenceException&#39;在这一行:

items.Add(lastArt);

两个对象都是definetely!= null,所以在我看来,它必须是我迭代中的错误。

2 个答案:

答案 0 :(得分:4)

尝试使用LINQ

var result = data.Skip(data.Count - 10).Take(10);
List<SomeType> list = new List<SomeType>(result.Reverse());

答案 1 :(得分:1)

让循环计数更容易。

不是试图跟踪从最后一个元素开始计数的i,而是从1开始并计数。

int numElements = 10; // or however you want from the end
for (int i = 1; i <= numElements && i <= elems.Count; i++)
   lastItems.Add(elems[elems.Count - i]);

使用LINQ更加容易。

List<MyClass> lastElements = elems.Reverse().Take(10).ToList();