哈希集处理以避免迭代期间陷入循环

2024-03-05

我正在研究图像挖掘项目,我使用 Hashset 而不是数组来避免在收集 url 时添加重复的 url,我到达了代码点以迭代包含主 url 的 Hashset,并在迭代中下载主 URL 的页面并将它们添加到哈希表中,然后继续,在迭代期间我应该排除每个扫描的 url,并排除(删除)以 jpg 结尾的每个 url,直到 url 计数的哈希表达到 0,问题是我在这次迭代中面临无限循环,我可能会得到 url (我们称之为 X )

1-我扫描 url X 的页面 2-获取页面X的所有url(通过应用过滤器) 3-使用 unioinwith 将 url 添加到哈希集 4-删除扫描的网址 X

当扫描其中一个 URL Y 时再次带来 X 时,问题就出现了

我应该使用字典和密钥作为“扫描”吗?我会尝试在这里发布结果,抱歉,在我发布问题后我想到了这个......

我设法解决了一个网址的问题,但似乎其他网址也会发生这种情况以生成循环,因此如何处理哈希集以避免重复,即使在删除链接后也是如此,我希望我的观点是清楚的。

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;

                }

感谢大家,我设法使用 Dictionary 而不是 Hashset 解决了这个问题,并使用 Key 来保存 URL ,并使用保存 int 的值,如果 url 被扫描,则为 1 ,如果 url 仍未处理,则为 0 ,下面是我的代码。 我使用另一个字典“URL_CANtoSave”来保存以 jpg“my target”结尾的 url...并且这个 While 循环..可以循环,直到根据您在过滤器字符串变量中指定的值耗尽网站​​的所有 url您相应地解析网址。

因此,要打破循环,您可以指定要在 URL_CantoSave 中获取的图像 url 数量。

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


                string tempURL;

                int i = 0;

// 我以前设置Dictionary Key的值,1或0(1表示扫描, 0 表示尚未,并进行迭代,直到扫描完所有词典键,或者根据您在其他词典中收集的图像 url 数量在中间中断

               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下载页面并继续分析

                    else
                    {

// 如果之前没有扫描过url

                        if (URL_Can[tempURL] != 1) 
                        {

// 这里看起来有点复杂,其中 Add2Dic 是添加到字典的过程,而无需再次添加密钥(解决主要问题!!) “ExtractURLfromLink”是另一个过程,它返回字典,其中包含通过下载 url 的文档字符串并分析它来分析的所有链接, 您可以根据您的分析添加删除过滤字符串

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());

// 这里还有另一个技巧,可以让迭代继续进行,直到扫描完所有收集到的链接

                    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"));
            }
        })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哈希集处理以避免迭代期间陷入循环 的相关文章

  • 如何为 Google Release 上的 Actions 提供不同的履行 URL?

    文档位于https developers google com actions deploy release environments https developers google com actions deploy release e
  • SharePoint 发布 HTML 字段控件将相对 URL 转换为绝对 URL

    因此 在对是否应该在面向外部的 SharePoint 网站上使用 CEWP 还是 HTML 字段控件进行了大量研究之后 我们决定使用字段控件 非常感谢 AC 现在 我们遇到了一个问题 我读过的所有博客都说这不应该是一个问题 当我们将相对 U
  • 正则表达式:验证没有查询参数的 URL 路径

    我不是正则表达式专家 我正在绞尽脑汁尝试做一个看起来非常简单并且在 python 2 7 中工作的事情 在没有查询字符串的情况下验证 URL 的路径 无主机名 换句话说 以 开头的字符串允许字母数字值 并且不允许任何其他特殊字符 除了这些
  • Magento - 分页生成错误的 URL

    除了网址之外 我的分页工作正常 第 2 页的链接是 example com products 21p 2 什么时候应该是 example com products p 2 当我在地址栏中输入后者时 它工作正常 这是生成链接的代码 li a
  • 在 Android 中下载文件

    我正在使用以下代码在 Android 中下载文件 public class FileDownloadActivity extends Activity ProgressDialog mProgressDialog Called when t
  • 如何使用 Perl 从纯文本中提取 URL?

    我需要 Perl 正则表达式来解析纯文本输入并将所有链接转换为有效的 HTML HREF 链接 我已经尝试了在网上找到的 10 个不同版本 但没有一个可以正常工作 我还测试了 StackOverflow 上发布的其他解决方案 但似乎都不起作
  • URL中的gs_upl是什么意思?

    在任何谷歌搜索 URL 中 gs upl 是什么意思 例如 那么 gs upl 1045l1663l0l3648l4l4l0l0l0l0l258l682l0 3 1l4l0 在这里意味着什么 从构建的脚本gs upl j 我找到 funct
  • 如何防止在以 .php 结尾的 URL 后添加其他字符串?

    我们网站的团队刚刚发现 任何用户都可以在以 php 扩展名结尾的 URL 后面添加斜杠 然后添加任何字符串 并且仍然可以访问相同的原始页面 例如 我可以通过以下方式访问 www mydomain com index php www mydo
  • 日期/时间值的 Django URL 转换器

    我正在尝试使用 Django 内置的 URL 转换器将 URL 中的日期时间字符串转换为视图中的日期对象 如果我手动输入 URL 它们会按预期工作 但尝试为其生成 URL 时找不到匹配项 我的转换器很简单 from django utils
  • 我应该如何使用 Perl URI 类?

    我需要在 Perl 程序中处理一些 HTTP URL 但我怀疑应该如何处理URI https metacpan org module URI类帮助我 特别是 我想使用URI用于解析相对 URL 并获取其组件的类 然而 问题是 我需要一个可以
  • 如何在java hashset中查找并返回对象

    根据 HashSet javadoc HashSet contains 仅返回布尔值 如何在 hashSet 中 查找 对象并修改它 它不是原始数据类型 我看到 HashTable 有一个 get 方法 但我更喜欢使用该集合 您可以删除一个
  • 一个在 Java 中进行 URL 查询字符串操作的好库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要用 Java 进行一些非常简单的 URL 操作 就像获取查询中参数的值或更新它一样 我希望在 commons lang 包中找到一个
  • 本地主机:8080 是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有什么区别本地主机 网络 vs 本地主机 8080 web TCP IP 连接始终与 IP 地址建立 您可以将 IP 地址视为某台计算机的
  • Django:在表单中初始化小部件时获取当前网址

    当我初始化表单以在其中找到我想要检查的字符串时 我想获取当前的 url 根据这个字符串 我想更改放入单选小部件中的数据 我想根据 url 显示不同的 radioselect 选项 class FunctionForm forms Model
  • 使用 Financial Modeling Prep (Python) 访问指定时间间隔的所有历史加密数据

    Financial Modeling Prep 是一个免费的 API 可用于访问各种财务指标 例如股票价格和加密货币数据 API 文档概述了如何通过 Python 等编程语言访问数据 特别是对于加密货币数据 https financialm
  • C# 正则表达式模式从给定字符串中提取 url - 不是完整的 html url,而是裸链接

    我需要一个正则表达式来执行以下操作 Extract all strings which starts with http Extract all strings which starts with www 所以我需要提取这2个 例如 下面有
  • 将文本中的所有 URL 替换为 PHP 中的可点击链接[重复]

    这个问题在这里已经有答案了 我有一个用 PHP 编写的 Web 应用程序 我想找到用户评论中的所有 URL 并将它们更改为可点击的链接 我搜索了很多网站和页面 找到了以下解决方案 不幸的是我没有再次找到它的参考链接 感谢其作者 该代码可以完
  • 无法使用前导 ../ 在顶级目录之上退出

    我有一个 asp net 网站 我们有管理区域 其中的登录页面仅供管理员使用 并且所有网站都允许所有人使用 当我收到此错误时 我需要询问如何为其定义正确的安全配置 Cannot use a leading to exit above the
  • Nginx merge_slashes 重定向

    我在我的 Java 应用程序中使用 nginx 我的问题是 nginx 正在合并斜杠 我无法将我的网站重定向到正确的版本 例如 http goout cz cs koncerty praha 被合并到 http goout cz cs ko
  • 如何在 Dart 中以正确的方式重定向和重新加载?

    在 Dart 中进行重定向和重新加载的首选方法是什么 我们是否只使用 window location href window location href 有几种不同的方法可以处理 URI 更改 每种方法都有自己的用途 当您想要将用户发送到另

随机推荐