ICollection - 检查集合是否包含对象

时间:2017-03-15 17:42:21

标签: c# .net collections

知道非通用ICollection没有提供@echo off Title Searching for a specific file (name and type) and copy to USB Drive Mode con cols=90 lines=10 & color 9E setlocal ENABLEDELAYEDEXPANSION for /f "tokens=2" %%i in ('wmic logicaldisk where "drivetype=2" ^|find /i ":"') do (Set MyUSB=%%i) set _drive=%MyUSB% If defined _drive ( cls echo. echo --------------------------------------------------------- echo Your usb key is connected as !_drive! echo --------------------------------------------------------- echo. pause Goto :search ) ELSE ( cls color 0C echo. echo -------------------------------------------------------------------------- echo Your usb key is not detected, please check it and re-run again this script echo -------------------------------------------------------------------------- echo. ) pause exit :Search Cls echo( echo -------------------------------------------------------------------------- echo Please Wait a while ....... Searching is in progress ......... echo -------------------------------------------------------------------------- set "LogSearch=%~dp0%~n0.txt" If exist "%LogSearch%" Del "%LogSearch%" set Pattern="CAL" "ERROR" For %%P in (%Pattern%) Do ( Where /R C:\ "*%%~P*.jpg" /F >> "%LogSearch%" 2>&1 If "%ErrorLevel%"=="1" ( Cls echo( echo -------------------------------------------------------------------------- echo No file(s^) found with this Pattern echo -------------------------------------------------------------------------- ) else ( for /f "delims=" %%a in ('Type "%LogSearch%"') do ( @echo found file %%a @Copy /Y %%a !_drive!\ ) ) ) pause & exit 方法,检查给定对象是否已经在集合中的最佳方法是什么?

如果我有两个Contains:A和B并且想要检查B是否具有A的所有元素,那么最好的方法是什么?我的第一个想法是将A的所有元素添加到HashSet中,然后使用ICollections检查所有B元素是否在集合中。

3 个答案:

答案 0 :(得分:3)

  

如果我有两个ICollections AB,并想检查B是否包含A的所有元素,那么最好的方法是什么?完成那个?

让我用集合语言重新解释你的问题。

  

如果我有两套AB,并想检查A是否是B的子集,那么最好的方法是什么?< / p>

现在很容易看到答案:

https://msdn.microsoft.com/en-us/library/bb358446%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

HashSet<T>构建A,然后使用IsSubsetOf方法查看AB的子集。

我注意到,如果这些是您必须经常执行的各种操作,那么您应该首先将数据保存在HashSet<T>集合中。如果两个集合都是散列集,则IsSubsetOf操作可能更有效。

答案 1 :(得分:0)

  

A和B想要检查B是否包含A的所有元素

我认为你倒退了。将B添加到HashSet。

HashSet.Contains是O(1)
总的来说,它将是O(n + m)

假设字符串

  HashSet<string> HashSetB = new HashSet<string>(iCollecionB);
  foreach (string s in iCollecionA) 
  {
      if(HashSetB.Contains(s))
      {
      }
      else 
      {
      }
  }  

答案 2 :(得分:-2)

Boolean ICollectionContains(ICollection collection, Object item)
{
   for (Object o in collection)
   {
      if (o == item)
         return true;
   }
   return false;
}

或者在扩展表格中:

public static class CollectionExtensions
{
   public static Boolean Contains(this ICollection collection, Object item)
   {
      for (Object o in collection)
      {
         if (o == item)
            return true;
      }
      return false;
   }
}

使用方法:

ICollection turboEncabulators = GetSomeTrunnions();

if (turboEncabulators.Contains(me))
   Environment.FailFast(); //How did you find me!