给定一个集合,我需要一次遍历三个(或其他数量)元素。例如:
string[] exampleData = {"John", "Doe", "1.1.1990", "Jane", "Roe", "2.2.1980"}
for(int i = 0; i < exampleData.Length; i += 3) {
CreateUser(foreName: exampleData[i], surName: exampleData[i+1], dateOfBirth: exampleData[i+2]);
}
如果exampleData是一个IEnumerable而不是一个数组,我怎么能有效地重现这个呢?
6条答案
按热度按时间vtwuwzda1#
.NET 6及更高版本
您可以使用LINQ Chunk extension method:
.NET 5及更早版本
你可以编写自己的扩展方法:
这样称呼它:
请注意,如果
sequence.Count()
不是size
的整数倍,则ChunksOf
将丢弃最后一个部分块。如果您想返回一个部分块,则可以在末尾添加:if (chunk.Count > 0) yield return chunk;
。doinxwow2#
此代码段将数组分组为3个元素的集合,然后为每个集合创建一个用户。
当然,您需要确保数组的长度是3的倍数。
vohkndzv3#
忘记foreach、花哨的linq、临时子列表等,回到根目录,怎么样?
在一次迭代中调用.GetEnumerator()和.MoveNext()三次。这就是枚举的核心。
前面的答案对我来说似乎过于复杂了。这是简单而核心的:-)。
8iwquhpp4#
虽然我更喜欢Michael的方法,但如果需要特定于字段的解析(例如DOB解析),您可能更喜欢更具体的方法
8cdiaqws5#
Take()
和Skip()
可以做你想做的事情,但我建议你避免像这样使用数组。你最好创建一个Person
类,其中包含FirstName
,LastName
和DateOfBirth
属性,并保留一个这些属性的数组。t5fffqht6#
可以使用LINQ
编辑:
或