IEnumerable<String> existedThings =
from mdinfo in mdInfoTotal select mdinfo.ItemNo;
IEnumerable<String> thingsToSave =
from item in lbXReadSuccess.Items.Cast<ListItem>() select item.Value;
Run Code Online (Sandbox Code Playgroud)
这是两个IEnumerable.
我想检查一下是否value in existedThings存在thingsToSave.
好的我可以用3行代码做到这一点.
bool hasItemNo;
foreach(string itemNo in existedThings)
hasItemNo= thingsToSave.Contains(itemNo);
Run Code Online (Sandbox Code Playgroud)
但是,看起来很脏.
我只是想知道是否有更好的解决方案.
int[] id1 = { 44, 26, 92, 30, 71, 38 };
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };
IEnumerable<int> both = id1.Intersect(id2);
foreach (int id in both)
Console.WriteLine(id);
//Console.WriteLine((both.Count() > 0).ToString());
Console.WriteLine(both.Any().ToString());
Run Code Online (Sandbox Code Playgroud)
如果IEnumerable不是从实现ICollection <>的类派生的,那么upvoted答案提出了一种具有O(n ^ 2)复杂度的算法.以Linq查询为例.然后,Count()扩展方法必须迭代所有元素以对它们进行计数.这不酷.您只需要检查结果是否包含任何元素:
bool hasItemNo = existedThings.Intersect(thingsToSave).Any();
Run Code Online (Sandbox Code Playgroud)
顺序很重要btw,使您希望具有最小项目数的枚举成为Intersect()的参数.
| 归档时间: |
|
| 查看次数: |
762 次 |
| 最近记录: |