2017-02-11 12 views
0

나는 이미지 마이닝 프로젝트에서 작업하고 있으며 배열 대신 Hashset을 사용하여 URL을 수집하는 동안 중복 된 URL을 추가하지 않으므로 코드 포인트에 도달하여 포함 된 Hashset을 반복합니다. 주요 URL 및 반복 내에서 주요 URL의 페이지를 다운로드하여 Hashet에 추가하고 계속 진행하고 반복되는 동안 모든 검색 한 URL을 제외해야하며 끝나는 모든 URL을 제외 (제거)해야합니다. jpg, URL 카운트의 Hashet가 0에 도달 할 때까지, 질문은 내가 URL (URL을 얻을 수 있음)을 얻을 수있는이 반복에서 끝없는 반복에 직면했다는 것입니다.반복하는 동안 루프에 끼어 들지 않도록하기위한 Hashset 처리

-1 나는 URL의 페이지를 스캔합니다. X 2 - X 페이지의 모든 URL 가져 오기 (필터 적용) 3- 추가 3- unioinwith 사용하여 HashSet의에 대한 URL은 "스캔으로 다시

내가 사전과 키를 사용해야한다 스캔 할 때 URL을 Y 중 하나가, X를 가져올 때 문제가 여기 오는 스캔의 URL X에게

을 제거 "?? 나는 시도하고 여기에 결과를 게시, 질문을 게시 후 미안 해요 내 마음에 온다 ...

나는 하나의 URL을 해결하기 위해 관리하지만, 그것은 다른 URL과 함께 루프를 생성하는 것 같은데, 그래서 어떻게 링크를 제거한 후에도 중복을 피하기 위해 Hashset을 처리하기 위해 ,,, 요점은 분명하다. 모든

while (URL_Can.Count != 0) 
{ 

        tempURL = URL_Can.First(); 

        if (tempURL.EndsWith("jpg")) 
        { 
         URL_CanToSave.Add(tempURL); 
         URL_Can.Remove(tempURL); 

        } 
        else 
        { 

         if (ExtractUrlsfromLink(client, tempURL, filterlink1).Contains(toAvoidLoopinLinks)) 
         { 

          URL_Can.Remove(tempURL); 

          URL_Can.Remove(toAvoidLoopinLinks); 
         } 
         else 
         { 
          URL_Can.UnionWith(ExtractUrlsfromLink(client, tempURL, filterlink1)); 

          URL_Can.UnionWith(ExtractUrlsfromLink(client, tempURL, filterlink2)); 

          URL_Can.Remove(tempURL); 

          richTextBox2.PerformSafely(() => richTextBox2.AppendText(tempURL + "\n")); 
         } 

        } 

        toAvoidLoopinLinks = tempURL; 

       } 

답변

0

덕분에, 나는 URL을 유지하는 대신 HashSet에의 사전을 사용하여이 문제를 해결하고 키를 사용하여 관리하고, URL을 스캔하는 경우 값은 1로, INT를 개최하거나, 아직 URL이 처리되지 않았다면 아래 코드를 따르십시오. 다른 사전 "URL_CANtoSave"를 사용하여 jpg "my target"으로 끝나는 URL을 보유하고 ... 필터 루프에서 지정한 값을 기반으로 웹 사이트의 모든 URL이 다할 때까지 While..can 루프가 반복됩니다. 그에 따라 URL을 구문 분석 변수입니다.

그래서 당신이 URL_CantoSave에 들어갈 이미지의 URL을 지정할 수 있습니다 루프를 깰 수는.

return Task.Factory.StartNew(() => 
     { 
      try 
      { 


       string tempURL; 

       int i = 0; 

는 // 나는 사전 키 1의 값을 설정하는 데 사용 또는 0 (1은 스캔됨을 나타냅니다. 은 0을 의미하고 다른 사전에서 수집 한 이미지의 양에 따라 모든 Dictionry Keys가 스캔되거나 중간에 깨질 때까지 반복합니다.

   while (URL_Can.Values.Where(value => value.Equals(0)).Any()) 


       { 

// 1 키를 가지고는 대상 파일 확장자로 끝나는 경우 확인 // 임시 변수에

    tempURL = URL_Can.ElementAt(i).Key; 

을 넣어. 이 경우 이미지 파일을

    if (tempURL.EndsWith("jpg")) 
        { 
         URL_CanToSave.Add(tempURL,0); 

         URL_Can.Remove(tempURL); 

        } 

//하지 않을 경우 이미지 가서 URL을 기반으로 페이지를 다운로드하고 URL이

     if (URL_Can[tempURL] != 1) 
         { 
그 전에 검사하지 // 경우
    else 
        { 

를 분석 유지

// Add2Dic은 키를 다시 추가하지 않고 사전에 추가하는 프로세스입니다 (주요 문제 해결 !!) "ExtractURLfromLink는"

Add2Dic(ExtractUrlsfromLink(client, tempURL, filterlink1), URL_Can, false); 
Add2Dic(ExtractUrlsfromLink(client, tempURL, filterlink2), URL_Can, false); 

URL_Can[tempURL] = 1; // to set it as scanned link 


    richTextBox2.PerformSafely(() => richTextBox2.AppendText(tempURL + "\n")); 
         } 



        } 


     statusStrip1.PerformSafely(() => toolStripProgressBar1.PerformStep()); 

// 여기가 온다 URL의 문서 문자열을 다운로드하고 분석 당신에 따라 제거 필터 문자열을 추가 할 수 있습니다 , 그것을 분석하여 분석 된 모든 링크와 사전을 돌려 또 다른 과정이다 이 반복을 유지하는 다른 트릭은 모든 수집 된 링크를 검사 할 때까지 계속됩니다.

    i++; if (i >= URL_Can.Count) { i = 0; } 

        if (URL_CanToSave.Count >= 150) { break; } 

       } 


       richTextBox2.PerformSafely(() => richTextBox2.Clear()); 

       textBox1.PerformSafely(() => textBox1.Text = URL_Can.Count.ToString()); 


       return ProcessCompleted = true; 




      } 
      catch (Exception aih) 
      { 

       MessageBox.Show(aih.Message); 

       return ProcessCompleted = false; 

       throw; 
      } 


      { 
       richTextBox2.PerformSafely(()=>richTextBox2.AppendText(url+"\n")); 
      } 
     })