C# 基于索引查找通用列表记录

C# 基于索引查找通用列表记录,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我所处的情况是,我需要从一个通用列表中找到记录,使用它的位置,意味着需要找到第1条第5条和第9条记录,然后是第2条第6条和第10条记录,依此类推 情况是 分配给团队成员列表的项目列表, 如果我们有20个项目和4个团队 然后第一个项目转到第一个团队,第二个转到第二个团队,第三个转到第三个团队,第四个转到第四个团队 然后第五个项目再转到第一个团队 就这样 Projects Team 1 1 2

我所处的情况是,我需要从一个通用列表中找到记录,使用它的位置,意味着需要找到第1条第5条和第9条记录,然后是第2条第6条和第10条记录,依此类推

情况是

分配给团队成员列表的项目列表, 如果我们有20个项目和4个团队

然后第一个项目转到第一个团队,第二个转到第二个团队,第三个转到第三个团队,第四个转到第四个团队 然后第五个项目再转到第一个团队

就这样

Projects              Team
1                     1
2                     2
3                     3
4                     4
5                     1
6                     2
7                     3
8                     4
9                     1
.
.
所以现在我想在通用列表上运行一个查询,以获取每个团队的记录,所以对于第一团队记录1、5和9。。。。我需要去拿

比如

 List<Project> lst = list (from Database)
 //For 1stTeam 
lst = lst.Index(1,5,9...);

//For 2nsTeam 
lst = lst.Index(2,6,10...);
List lst=List(来自数据库)
//一分钟
lst=lst指数(1,5,9…);
//为了蒸汽
lst=lst指数(2,6,10…);

希望我能澄清我的观点。

首先,这不是通用列表所特有的


您必须创建一个新列表,然后从原始列表中逐个添加您想要添加到新列表中的项目。您可以通过索引器(方括号)访问给定位置的单个项目

i、 e.你在原始列表上循环,每四个项目一次


如果要添加到其中一个团队的项目没有在整个
lst
中定期分发,则必须逐个添加,但您可以使用较短的列表初始值设定项语法:

List<Project> firstTeam = new List<Project>() { lst[1], lst[5], lst[9] };
List firstTeam=newlist(){lst[1],lst[5],lst[9]};


最后,请注意,
List
从零开始计算索引,因此第一项是
lst[0]
,而不是
lst[1]
,首先,这不是通用列表特有的


您必须创建一个新列表,然后从原始列表中逐个添加您想要添加到新列表中的项目。您可以通过索引器(方括号)访问给定位置的单个项目

i、 e.你在原始列表上循环,每四个项目一次


如果要添加到其中一个团队的项目没有在整个
lst
中定期分发,则必须逐个添加,但您可以使用较短的列表初始值设定项语法:

List<Project> firstTeam = new List<Project>() { lst[1], lst[5], lst[9] };
List firstTeam=newlist(){lst[1],lst[5],lst[9]};

最后,请注意,
List
从零开始计算索引,因此第一项是
lst[0]
,而不是
lst[1]
,您正在查找关键字。它将允许您将参数数组传递到
Index
中,这些参数是您案例中的索引

在您的情况下,扩展方法可以实现以下功能:

public static List<Project> Index(this List<Project> list, params int[] indexes) 
{
  var newList = new List<Project>();
  foreach(var index in indexes)
  {
     newList.Add(list[index]);
  }
  return newList;
}
公共静态列表索引(此列表,参数int[]索引)
{
var newList=新列表();
foreach(指数中的var指数)
{
添加(列表[索引]);
}
返回newList;
}
您正在查找关键字。它将允许您将参数数组传递到
Index
中,这些参数是您案例中的索引

在您的情况下,扩展方法可以实现以下功能:

public static List<Project> Index(this List<Project> list, params int[] indexes) 
{
  var newList = new List<Project>();
  foreach(var index in indexes)
  {
     newList.Add(list[index]);
  }
  return newList;
}
公共静态列表索引(此列表,参数int[]索引)
{
var newList=新列表();
foreach(指数中的var指数)
{
添加(列表[索引]);
}
返回newList;
}
您可以使用:

List<Project> projects; // = something from db
var neededIndexes = new[] { 0, 4, 8 };

var result = projects.Where((project, index) => neededIndexes.Contains(index)).ToList();
列出项目;//=来自db的东西
var neededIndex=new[]{0,4,8};
var result=projects.Where((project,index)=>needededIndexes.Contains(index)).ToList();
或者,如果索引分布均匀:

List<Project> projects; // = something from db

var result = projects.Where((project, index) => index % 4 == 0).ToList();
列出项目;//=来自db的东西
var result=projects.Where((project,index)=>index%4==0.ToList();
您可以使用:

List<Project> projects; // = something from db
var neededIndexes = new[] { 0, 4, 8 };

var result = projects.Where((project, index) => neededIndexes.Contains(index)).ToList();
列出项目;//=来自db的东西
var neededIndex=new[]{0,4,8};
var result=projects.Where((project,index)=>needededIndexes.Contains(index)).ToList();
或者,如果索引分布均匀:

List<Project> projects; // = something from db

var result = projects.Where((project, index) => index % 4 == 0).ToList();
列出项目;//=来自db的东西
var result=projects.Where((project,index)=>index%4==0.ToList();

这可以解决您的问题:

每个团队的列表:

List<List<Project>> projectsPerTeam = new List<List<Project>> ();
for(int i=0;i<teamsList.Count();i++)
{
    projectsPerTeam.Add(new List<Project> ());
}
List projectsPerTeam=新列表();

对于(int i=0;i这将解决您的问题:

每个团队的列表:

List<List<Project>> projectsPerTeam = new List<List<Project>> ();
for(int i=0;i<teamsList.Count();i++)
{
    projectsPerTeam.Add(new List<Project> ());
}
List projectsPerTeam=新列表();

对于(int i=0;i您可以使用LINQ
Select
GroupBy
执行类似操作:

List<int> list = new List<int>{1,2,3,4,5,6,7,8,9,10};
int numberOfTeams = 4;
var projectsByTeam = list
 .Select((number, index) => new {Value = number, Index = index})
 .GroupBy(item => item.Index % numberOfTeams)
 .Select(item => new {TeamNumber = item.Key+1, ProjectIDs = item.Select(x => x.Value).ToList()})
 .ToList();

您可以使用LINQ
Select
GroupBy
执行类似操作:

List<int> list = new List<int>{1,2,3,4,5,6,7,8,9,10};
int numberOfTeams = 4;
var projectsByTeam = list
 .Select((number, index) => new {Value = number, Index = index})
 .GroupBy(item => item.Index % numberOfTeams)
 .Select(item => new {TeamNumber = item.Key+1, ProjectIDs = item.Select(x => x.Value).ToList()})
 .ToList();

问题不太清楚!!你能详细说明一下吗?问题不太清楚!!你能详细说明一下吗?这一定是迄今为止我见过的通过索引访问项的最模糊的方法。我更喜欢Linq链接,因为它可以保存在一行中。这一定是我见过的通过索引访问项的最模糊的方法我更喜欢Linq链接而不是循环,因为它可以保存在一行中。