gpt4 book ai didi

c# - 用于迭代关联值集的模式是什么?

转载 作者:太空狗 更新时间:2023-10-30 00:59:22 25 4
gpt4 key购买 nike

这是很常见的——尤其是当你试图让你的代码变得更受数据驱动时——需要迭代关联的集合。例如,我刚写完一段代码,如下所示:

string[] entTypes = {"DOC", "CON", "BAL"};
string[] dateFields = {"DocDate", "ConUserDate", "BalDate"};
Debug.Assert(entTypes.Length == dateFields.Length);

for (int i=0; i<entTypes.Length; i++)
{
string entType = entTypes[i];
string dateField = dateFields[i];
// do stuff with the associated entType and dateField
}

在 Python 中,我会这样写:

items = [("DOC", "DocDate"), ("CON", "ConUserDate"), ("BAL", "BalDate")]
for (entType, dateField) in items:
# do stuff with the associated entType and dateField

我不需要声明并行数组,我不需要断言我的数组长度相同,我不需要使用索引来取出项目。

我觉得有一种使用 LINQ 在 C# 中执行此操作的方法,但我不知道它可能是什么。是否有一些简单的方法可以遍历多个关联的集合?

编辑:

我认为这要好一些 - 至少,在我可以在声明时手动压缩集合并且所有集合都包含相同类型的对象的情况下:

List<string[]> items = new List<string[]>
{
new [] {"DOC", "DocDate"},
new [] {"CON", "ConUserDate"},
new [] {"SCH", "SchDate"}
};
foreach (string[] item in items)
{
Debug.Assert(item.Length == 2);
string entType = item[0];
string dateField = item[1];
// do stuff with the associated entType and dateField
}

最佳答案

在 .NET 4.0 中,他们向 IEnumerable 添加了一个“Zip”扩展方法,因此您的代码可能类似于:

foreach (var item in entTypes.Zip(dateFields, 
(entType, dateField) => new { entType, dateField }))
{
// do stuff with item.entType and item.dateField
}

目前我认为最简单的做法是将其保留为 for 循环。有一些技巧可以引用“其他”数组(例如,通过使用提供索引的 Select() 的重载),但没有一个像简单的 for 迭代器那样干净。

Here's a blog post about Zip as well as a way to implement it yourself .应该让你同时继续。

关于c# - 用于迭代关联值集的模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com