在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个索引。 地图包含7个索引。
如何立即执行FOR循环,以便它将遍历所有7个地图,并为每个地图使用标记。
例如对于Maps [0],StartTag是“image2.ashx” 但对于地图[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都有另外数量的索引?
答案 0 :(得分: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";