用于简单查找的.net工具
本文关键字:net 工具 查找 简单 用于 | 更新日期: 2023-09-27 17:53:28
所以我发现自己最近在写这些代码。
Dictionary<string, byte> dict = new Dictionary<string, byte>();
foreach(string str in arbitraryStringCollection)
{
if(!dict.ContainsKey(str))
{
ProcessString(str);
dict[str] = 0;
}
}
这个例子过于笼统,但我发现自己的共同目标是"我已经做过这个了吗?"
我喜欢使用Dictionary进行快速键查找,但由于我从不关心值字段,我不禁觉得它有点过分,即使它只是每个条目一个字节。
有没有更好的。net工具可以做到这一点,有字典的键查找速度,但没有任意和不必要的值?
您应该使用HashSet<T>
HashSet<string> hashSet= new HashSet<string>();
foreach(string str in arbitraryStringCollection)
{
if(!hashSet.Contains(str))
{
ProcessString(str);
hashSet.Add(str);
}
}
让它更短:
foreach(string str in arbitraryStringCollection)
{
if(hashSet.Add(str)) ProcessString(str);
}
没有相应的工具或库,但是您可以重构这段代码以减少冗长。例如,代码可以使用Distinct方法简化。
foreach (var str in arbitraryStringCollection.Distinct())
{
ProcessString(str)
}
您可以使用某种ForEach
扩展方法进一步重构它,或者将整个东西重构为一个扩展方法。
或者,如果您的需求略有不同(例如,您希望在应用程序的生命周期中保留dict
),那么可以以略有不同的方式重构,例如
HashSet<string> dict = new HashSet<string>();
foreach(string str in arbitraryStringCollection)
{
dict.DoOnce(str, ProcessString);
}
// Re-usable extension method)
public static class ExtensionMethods
{
public static void DoOnce<T>(this ISet<T> set, T value, Action<T> action)
{
if (!set.Contains(value))
{
action(value);
set.Add(value);
}
}
}