如何将现有项目推送到列表的末尾?

问题描述:

我有一个团队名单。一个团队是这样定义的:如何将现有项目推送到列表的末尾?

public class Team 
{ 
    public int ID { get; set; } 

    public string Name { get; set; } 
} 

我查询与db.Teams.ToList()数据库,它返回一个List<Team>后,我需要推动该列表中的名称为“总”的球队之一的结束名单。我怎样才能做到这一点?

+0

你到底意味着什么?如果你的意思是下一个索引,这是它的默认行为 – Yar

+1

为什么你不能在C#端或DataBase端对列表进行排序?您也可以删除该项目并将其重新插入到基于索引的列表中..还编辑问题并向我们显示项目在当前列表中的样子。 – MethodMan

+0

@Yar到列表的末尾。我从数据库中检索团队列表。如果名为“Total”的团队位于该列表的中间,我想将其排序到该列表的末尾。 –

首先,你可以在查询直接做到这一点:

var list = db.Teams.OrderBy(t => t.Name == "Total" ? 1 : 0).ToList(); 

但如果你坚持的名单后做填充,然后你可以使用FindIndex方法找到的总项目的索引(如果有的话),并使用RemoveAtAdd方法移动项目到最后:

var list = db.Teams.ToList(); 
int index = list.FindIndex(t => t.Name == "Total"); 
if (index >= 0 && index != list.Count - 1) 
{ 
    var total = list[index]; 
    list.RemoveAt(index); 
    list.Add(total); 
} 

在后一种情况,如果你真的不关心列表中的其他项目的顺序,另一个更高效方式是t o只需将总数与最后一个元素进行交换:

if (index >= 0 && index != list.Count - 1) 
{ 
    var total = list[index]; 
    list[index] = list[list.Count - 1]; 
    list[list.Count - 1] = total; 
} 
+0

我试过你的LINQ表达式,但没有奏效。 –

+0

我假设你想在“视图”中显示团队总数或将其传递给其他服务。最好的模式是查询现有的List,并从中创建一个新的对象Team;但是要根据这个问题来实现结果 - 一旦List已经被填充,你可以插入带有Name = Total的新的Team对象,并且在Name属性上使用搜索来继续渲染它。希望你明白我的意思。 –

+0

你是什么意思,它没有工作?你是否得到错误或不正确的结果?我会很惊讶,因为我正在做很多这样的查询没有问题。 –

获取列表并将您想要的那个移到最后一个索引。请注意,您不需要订购清单。说你的目标是在这种情况下2

List<int> list = new List<int> 
{ 
    0, 
    1, 
    2, 
    3, 
    4 
}; 

// get the object o(n) 
int tmp = list.IndexOf(2); 
// remove it 
list.RemoveAt(2); 
// add it to the end of list 
list.Add(tmp); 

简短的回答:生成哈希码

请看看这个答案来自@乔恩飞碟双向 - https://*.com/a/8094931/6830901

更简单的基础上,要求我理解:

在第一循环 请在Team.Name != "Total"查找和之后的循环已经结束,检查列表Team.Name == "Total"

放置Team的位置并不重要(考虑共享列表)。这取决于我们如何使用查询而不是注入对象的位置