Day*_*yan 0 c# collections duplicate-removal
public struct RegistryApp
{
public string VendorName;
public string Name;
public string Version;
}
Run Code Online (Sandbox Code Playgroud)
我有两个List<RegistryApp>用于保存Windows框中当前安装的所有应用程序.为什么两个?好吧,我有一个List来保存所有x86应用程序,一个用于保存所有x64应用程序.
List<RegistryApp> x64Apps64List = new List<RegistryApp>();
List<RegistryApp> x64Apps32List = new List<RegistryApp>();
Run Code Online (Sandbox Code Playgroud)
一旦这两个填充了从注册表中检索到的适当数据,我尝试以下操作以确保没有重复项.这种方法很有效,List<string>但没有合作List<RegistryApp>.
List<RegistryApp> ListOfAllAppsInstalled = new List<RegistryApp>();
IEnumerable<RegistryApp> x86Apps = x64Apps32List.Except(x64Apps64List);
IEnumerable<RegistryApp> x64Apps = x64Apps64List.Except(x64Apps32List);
foreach (RegistryApp regitem in x86Apps)
{
if ((regitem.Name != null) &&
(regitem.Name.Length > 2) &&
(regitem.Name != ""))
{
ListOfAllAppsInstalled.Add(regitem);
}
}
foreach (RegistryApp regitem in x64Apps)
{
if ((regitem.Name != null) &&
(regitem.Name.Length > 2) &&
(regitem.Name != ""))
{
ListOfAllAppsInstalled.Add(regitem);
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以解决这个问题?
EDITED
要从另一个List中存在的Structs列表中删除项目,您可以看到Cuong LeHere 提供的解决方案:
通过在List类型上使用Distinct无参数扩展方法,我们可以删除这些重复元素.
然后,我们可以选择调用ToList扩展来获取删除了重复项的实际List.
static void Main()
{
// List with duplicate elements.
List<int> mylist = new List<int>();
mylist.Add(1);
mylist.Add(2);
mylist.Add(3);
mylist.Add(3);
mylist.Add(4);
mylist.Add(4);
mylist.Add(4);
foreach (int value in mylist)
{
Console.WriteLine("Before: {0}", value);
}
// Get distinct elements and convert into a list again.
List<int> distinct = mylist.Distinct().ToList();
foreach (int value in distinct)
{
Console.WriteLine("After: {0}", value);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我的答案解决了您的问题,请单击"接受为解决方案"按钮,这样做可以帮助其他人了解解决方
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |