我有两个填充了CustomsObjects的通用列表.
我需要在第三个列表中检索这两个列表(第一个没有第二个项目的项目)之间的差异.
我在想使用.Except()是一个好主意,但我不知道如何使用这个..帮助!
我想在c#中获得两组int之间的区别.给定s1和s2我想返回那些在s1而不在s2中的int.我可以做一些事情,比如:
List<int> s1 = new List<int>();
List<int> s2 = new List<int>();
foreach (int i in s1)
{
if (s1.Contains(i))
{
//
}
else
{
//
}
}
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有人能指出更清洁的东西.我想做点什么
List<int> omitted = s1.Difference(s2);
Run Code Online (Sandbox Code Playgroud)
不确定是否有任何人可能指出的现有方法或LINQ结构?谢谢.
我有课:
class SomeClass
{
public string Name{get;set;}
public int SomeInt{get;set;}
}
class SomeComparison: IEqualityComparer<SomeClass>
{
public bool Equals(SomeClass s, SomeClass d)
{
return s.Name == d.Name;
}
public int GetHashCode(SomeClass a)
{
return (a.Name.GetHashCode() * 251);
}
}
Run Code Online (Sandbox Code Playgroud)
我也有两个List<SomeClass>大叫list1和list2
在我以前之前:
var q = (from a in list1
from b in list2
where a.Name != b.Name
select a).ToList();
Run Code Online (Sandbox Code Playgroud)
这花了大约1分钟来执行.我现在有:
var q = list1.Except(list2,new SomeComparison()).ToList();
Run Code Online (Sandbox Code Playgroud)
这需要不到1秒!
我想了解Except方法的作用.该方法是否为每个列表创建哈希表,然后执行相同的比较?如果我要进行大量的比较,我应该创建一个Hashtable吗?
现在我没有列表,而是有两个HashSet<SomeClass>叫做 hashSet1和hashSet2
当我做:
var q …Run Code Online (Sandbox Code Playgroud) 我试图找到一些关于我的问题的文章,但没有找到任何相关的或对我的应用程序有意义的文章。这是我的问题:
我有两个(> 20,000)个项目的列表。
我需要根据相反列表中的每个项目检查每个列表中的每个项目。
像这样的实现:
foreach(var item1 in List1)
{
foreach(var item2 in List2)
{
// Check item 1 against item 2.
// Check item 2 against item 1.
}
}
Run Code Online (Sandbox Code Playgroud)
由于为检查所做的工作,速度非常慢且无法使用。
有没有更有效的方法来处理这些需要像这样检查的大型项目列表?
如果我能提供更多信息,请告诉我。感谢您的任何帮助/建议。
我正在使用 C# .NET 3.5
编辑:让我试着简要解释一下这些检查。
item1 和 item2 是路径系统的一部分。item1 和 item2 由 N 个其他项目连接。我正在检查 item1 是否连接(有效路径)到 item2,并且 item2 连接到 item1。不能假设如果 item1 -> item2,比 item2 -> item1。所以这两项检查都是必要的。
数据库包含信息 if 和 how item1 -> item2 和 if/how item2 -> item1。在检查内部,有一个对服务的命名管道调用来进行检查。该服务会执行所有路径检查,并在 item1 -> item2 等情况下返回。