嗨,我是linq和c#的新手。
我需要按N对客户端对象列表进行分组,并将其替换为tab。 例如 清单: USER1 用户2 (......) 用户N
我希望收到List<Client>[] tabOfClients
里面较小的列表,如:
tab [0] - user1到userN的列表
tab [1] - userN + 1到用户2N的列表
(...)
N = 3
时我找到了将每个第三个对象分组的方法,但它不是我的目标 有人帮帮我吗?
答案 0 :(得分:2)
一些条带和分组:
var groupedUsers = users.Select((e,i) => new{ Index=Math.Floor(i/n),User=e})
.GroupBy(g => g.Index);
实例:http://rextester.com/GZORR50968
解释:
users
是您要分组的对象列表
users.Select((e,i) => new{ Index=Math.Floor(i/n),User=e})
项目列出了具有2个属性的匿名对象列表:
Index
是将项目的索引除以组中所需的项目数的结果User
是原始对象此时,您最终会得到一个列表,例如
然后您可以GroupBy
Index
获取列表清单。
答案 1 :(得分:0)
为N的每个倍数执行循环并在循环内为每个选项卡[x]创建一个新列表,并使用适当的用户填充列表。
答案 2 :(得分:0)
这是使用Dictionary<int,List<string>>
List<string> list = new List<string>{"1","2","3","4","5","6","7"};
var dict = new Dictionary<int, List<string>>();
for (int i = 0; i < list.Count; i+=3)
dict[i] = list.Where((s,index) => index >= i && index < i+3).ToList();
答案 3 :(得分:-1)
我不知道为什么你想通过linq这样做,但它是可行的:
static void Main(string[] args)
{
var o = Enumerable.Range(0, 100).Select(x => x.ToString());
int i = 0;
var groups = o.GroupBy(x => i++ / 3);
foreach (var g in groups)
{
Console.WriteLine(String.Join(",", g));
}
}
我们正在使用i
来计算某些内容被击中和分组的次数。
请注意,这可能不适用于所有LINQ源,但对于简单的集合,它可以正常工作。
我建议您简单地使用该方法。