假设我有两个 List<string>
。这些是从阅读文本文件
列表所有者包含:
cross
jhill
bbroms
列表受让人包含:
Chris Cross
Jack Hill
Bryan Broms
从SQL源读取期间(SQL语句包含连接)...我会执行
if(sqlReader["projects.owner"] == "something in owner list" || sqlReader["assign.assignee"] == "something in assignee list")
{
// add this projects information to the primary results LIST
list_by_owner.Add(sqlReader["projects.owner"],sqlReader["projects.project_date_created"],sqlReader["projects.project_name"],sqlReader["projects.project_status"]);
// if the assignee is not null, add also to the secondary results LIST
// logic to determine if assign.assignee is null goes here
list_by_assignee.Add(sqlReader["assign.assignee"],sqlReader["projects.owner"],sqlReader["projects.project_date_created"],sqlReader["projects.project_name"],sqlReader["projects.project_status"]);
}
我不想最终使用嵌套的foreach。
FOR循环可能就足够了。有人向我提到了ZIP,但不确定这是否适合我的情况。
答案 0 :(得分:2)
迭代两个列表的一个循环(假设两个具有相同的计数):
for (int i = 0; i < alpha.Count; i++)
{
var itemAlpha = alpha[i] // <= your object of list alpha
var itemBeta = beta[i] // <= your object of list beta
//write your code here
}
答案 1 :(得分:2)
根据您的描述,您根本不需要进行迭代。
这就是你需要的: http://msdn.microsoft.com/en-us/library/bhkz42b3.aspx
用法:
if ((listAlpga.contains(resultA) || (listBeta.contains(resultA)) {
// do your operation
}
列表迭代将在contains
方法中隐式发生。那就是2n比较,而n * n则是嵌套迭代。
如果你需要走这条路,那么你会在每个列表中一个接一个地进行顺序迭代会更好。
答案 2 :(得分:1)
这个列表可能更好地表示为List<KeyValuePair<string, string>>
,它将两个列表值组合在一个列表中。
答案 3 :(得分:1)
有几种选择。最简单的“痛苦”将是普通的for
循环:
for (var index = 0; index < alpha.Count; index++)
{
var alphaItem = alpha[index];
var betaItem = beta[index];
// Do something.
}
另一个有趣的方法是使用索引的LINQ方法(但是你需要记住它们被懒惰地评估,你必须使用得到的可枚举),例如:
alpha.Select((alphaItem, index) =>
{
var betaItem = beta[index];
// Do something
})
如果您直接使用枚举器,也可以枚举这两个集合:
using (var alphaEnumerator = alpha.GetEnumerator())
using (var betaEnumerator = beta.GetEnumerator())
{
while (alphaEnumerator.MoveNext() && betaEnumerator.MoveNext())
{
var alphaItem = alphaEnumerator.Current;
var betaItem = betaEnumerator.Current;
// Do something
}
}
答案 4 :(得分:0)
答案 5 :(得分:0)
我喜欢做这样的事情来枚举并行列表:
int alphaCount = alpha.Count ;
int betaCount = beta.Count ;
int i = 0 ;
while ( i < alphaCount && i < betaCount )
{
var a = alpha[i] ;
bar b = beta[i] ;
// handle matched alpha/beta pairs
++i ;
}
while ( i < alphaCount )
{
var a = alpha[i] ;
// handle unmatched alphas
++i ;
}
while ( i < betaCount )
{
var b = beta[i] ;
// handle unmatched betas
++i ;
}