-1

在form1我有这个代码:

using (WebClient client = new WebClient())
            {
                client.DownloadFile("http://www.sat24.com/foreloop.aspx?type=0&continent=europa#", localFilename + "Sat24_Temperature_Europe.html");
                client.DownloadFile("http://www.sat24.com/foreloop.aspx?type=1&continent=europa#", localFilename + "Sat24_Rain_Europe.html");
                client.DownloadFile("http://www.sat24.com/foreloop.aspx?type=2&continent=europa#", localFilename + "Sat24_Wind_europe.html");
                client.DownloadFile("http://www.sat24.com/foreloop.aspx?type=3&continent=europa#", localFilename + "Sat24_Lightnings_Europe.html");
                client.DownloadFile("http://www.sat24.com/foreloop.aspx?type=4&continent=europa#", localFilename + "Sat24_Cloudtypes_Europe.html");
                client.DownloadFile("http://www.sat24.com/?ir=true&ra=true&li=false", localFilename + "Sat24_Cloudsheight_Europe.html");
                client.DownloadFile("http://www.sat24.com/en/eu?ir=true", localFilename + "Sat24_Satellite_Europe.html");
            }
            MapsToRead = Directory.GetFiles(localFilename, "*.*");
            for (int i = 0; i < MapsToRead.Length; i++)
            {
                string s = File.ReadAllText(MapsToRead[i]);
                Maps.Add(s);
            }
            StartTags = new List<string>();
            StartTags.Add("image2.ashx"); 
            StartTags.Add("http://www.niederschlagsradar.de/images.aspx"); 
            LastTags = new List<string>();
            LastTags.Add("ra=true");
            LastTags.Add("cultuur=en-GB&continent=europa");
            LastTags.Add("ir=true");

由于在大多数情况下 html 文件中的标签是相同的,我只添加了需要的标签到 StartTags 和 LastTags。

现在在新课程中,我有一个方法正在做:

public ExtractImages(List<string> FirstTags, List<string> LastTags, List<string> Maps, string LocalFileDir, string UrlsDir)
        {
            localdir = LocalFileDir;
            counter = 0;
            imagesSatelliteUrls = new List<string>();
            imagesRainUrls = new List<string>();
            int startIndex = 0;
            int endIndex = 0;
            int position = 0;
            for (int i = 0; i < FirstTags.Count; i++)
            {
                string startTag = FirstTags[i];
                string endTag = LastTags[i];
                startIndex = Maps[i].IndexOf(startTag);
                while (startIndex > 0)
                {

                    endIndex = Maps[i].IndexOf(endTag, startIndex);
                    if (endIndex == -1)
                    {
                        break;
                    }
                    string t = Maps[i].Substring(startIndex, endIndex - startIndex + endTag.Length);
                    imagesSatelliteUrls.Add(t);

在我对 Form1 中的标签进行更改之前,我只是将相同的标签添加到每个标签列表中 7 次,因为列表映射包含 7 个索引。然后在我做的新电话中:

for (int i = 0; i < FirstTags.Count; i++)

所以 FirstTags 包含 7 个索引 LastTags 包含 7 个索引, Maps 包含 7 个索引。但现在更改后 FirstTags 包含 2 个索引,LastTags 包含 3 个索引。Maps 包含 7 个索引。

我现在如何执行 FOR 循环,以便它将运行所有 7 个地图并为每个地图使用标签。

例如,对于 Maps[0],StartTag 是“image2.ashx”,但对于 Maps[1] 和 [2] 和 [4] [5] 和 [6],它的标签相同:“ http://www.niederschlagsradar。 de/images.aspx "

LastTags 也是如此。

现在 Form1 中的标签是这样的:

StartTags = new List<string>();
StartTags.Add("image2.ashx"); 
StartTags.Add("http://www.niederschlagsradar.de/images.aspx"); 
LastTags = new List<string>();
LastTags.Add("ra=true");
LastTags.Add("cultuur=en-GB&continent=europa");
LastTags.Add("ir=true");

这就是我更改之前旧版本的情况:

StartTags = new List<string>();
            StartTags.Add("image2.ashx"); 
            StartTags.Add("http://www.niederschlagsradar.de/images.aspx"); // Cloudstypes forecast map of europe
            StartTags.Add("http://www.niederschlagsradar.de/images.aspx"); // Lightnings forecast map of europe
            StartTags.Add("image2.ashx"); // Satellite map of europe
            StartTags.Add("http://www.niederschlagsradar.de/images.aspx"); // Rain forecast map of europe
            StartTags.Add("http://www.niederschlagsradar.de/images.aspx"); // Temperature forecast map of europe
            StartTags.Add("http://www.niederschlagsradar.de/images.aspx"); // Wind forecast map of europe
            LastTags = new List<string>();
            LastTags.Add("ra=true"); // Cloudsheight forecast map of europe
            LastTags.Add("cultuur=en-GB&continent=europa"); // Cloudstypes forecast map of europe
            LastTags.Add("cultuur=en-GB&continent=europa"); // Lightnings forecast map of europe
            LastTags.Add("ir=true"); // Satellite map of europe
            LastTags.Add("cultuur=en-GB&continent=europa"); // Rain forecast map of europe
            LastTags.Add("cultuur=en-GB&continent=europa"); // Temperature forecast map of europe
            LastTags.Add("cultuur=en-GB&continent=europa"); // Wind forecast map of europe

由于其中一些标签大部分是相同的,我改变了它,但现在我如何在新类中创建 FOR 循环,因为每个 List 都有不同数量的索引?

4

1 回答 1

1

你不需要那样压缩你的列表。因为其中的字符串.NET不可变的,并且由编译器进行了优化。所有相同的字符串对象将指向存储字符串值的相同内存。您的旧List的当然将有更多的引用指向存储字符串值的内存,而不是新的浓缩的。但那是非常非常少的。如果您想避免用于向您添加项目的重复代码,Lists您可以尝试使用Enumerable.Repeat如下方法:

StartTags = new List<string>();
StartTags.AddRange(Enumerable.Repeat("http://www.niederschlagsradar.de/images.aspx",7));
StartTags[0] = StartTags[3] = "image2.ashx";

LastTags = new List<string>();
LastTags.AddRange(Enumerable.Repeat("cultuur=en-GB&continent=europa",7));
LastTags[0] = "ra=true";
LastTags[3] = "ir=true";
于 2013-10-27T20:53:11.327 回答