【发布时间】:2020-11-12 14:02:30
【问题描述】:
我有两种类型:
public class SubCategories
{
public static List<SubCategories> subCategories = new List<SubCategories>();
public string title { get; set; }
public string IDfromCategories { get; set; }
public string subCategoryID { get; set; }
public bool isChecked { get; set; }
}
public class UserInsideCategories
{
public string userEmail { get; set; }
public string iDfromSubCategories { get; set; }
}
还有两个列表都多次包含这个对象。
现在我想检查一个类型为SubCategories 的列表并检查每个对象是否包含与我的其他UserInsideCategories 类型的列表相同的值。具体来说,我想知道 list.SubcategoryID 上的任何对象是否等于另一个 list.IdFromSubCateogires 上的任何对象。
我是这样实现的:
List<SubCategories> branch = new List<SubCategories>();
for(int i = 0; i < subCategories.Count; i++)
{
SubCategories e = new SubCategories();
for(int x = 0; x < allSubs.Count; x++)
{
if (e.IDfromCategories == allSubs[x].iDfromSubCategories)
e.isChecked = true;
}
branch.Add(e);
}
所以我使用的是嵌套循环。但由于我必须多次执行此操作,所以时间太长了。
我还考虑将 SubCategories 中的所有值转换为一个简单的字符串数组,并使用Contains 函数,查看当前 object.IDfromCategories 是否包含数组上的对象。这意味着我不会使用 for 循环。但在内部,我相信系统仍在使用循环,因此不会带来性能优势。
如果每个对象都包含另一个列表中的值,那么检查每个对象的最佳方法是什么?
【问题讨论】:
-
您似乎只想检查
allSubs是否包含iDfromSubCategories == IDfromCategories的条目,所以我会将所有iDfromSubCategories转换为HashTable并从快速查找中获利! -
@Knoop 您的假设是正确的。哈希表?能举个例子吗?
-
我想如果你一发现第一次出现就跳出内部循环,你会获得一些查找速度。
-
其实这是个好主意!