我做了一个存储ip数据的应用程序。让我们说我的ip每1分钟就会改变一次。如果在将新文件添加到文本框之前我没有新的IP。如果我 - 已在文本框中添加"Duplicate"
。
我所做的是创建一个字符串列表。该应用正在将每个new_ip
变量添加到List。如果它是独一无二的,请保留它。如果不是,则删除List
的第一个值并将"Duplicate"
添加到textBox
。
我不知道为什么我的订单正在发生变化。代码是:
private void timer1_Tick(object sender, EventArgs e)
{
try
{
new_ip = new System.Net.WebClient().DownloadString("https://api.ipify.org");
}
catch
{
}
if (old_ip != new_ip)
{
ipList.Add(new_ip);
if (ipList.GroupBy(n => n).Any(c => c.Count() > 1))
{
ipList.Remove(ipList.First());
ipList.Add("duplicate " + ile.ToString());
ile++;
}
foreach (var name in ipList)
{
textBox1.Text += name + "\r\n";
}
textBox1.Text += "+---------------------+\r\n";
}
old_ip = new_ip;
}
这是一个简短的例子。正确的ip顺序应该是:
11.111.111.111
duplicate 1
22.222.222.222
duplicate 2
33.333.333.333
44.444.444.444
但不幸的是,应用程序给了我这个:
11.111.111.111
+---------------------+
11.111.111.111
22.222.222.222
+---------------------+
22.222.222.222 <--- what the hell happened there?
11.111.111.111 <--- that should be 1 row upper
duplicate 1
+---------------------+
11.111.111.111 <-- Hmm.. it seems to be fine somehow..
duplicate 1
22.222.222.222
duplicate 2
+---------------------+
11.111.111.111
duplicate 1
22.222.222.222
duplicate 2
33.333.333.333
+---------------------+
11.111.111.111
duplicate 1
22.222.222.222
duplicate 2
33.333.333.333
44.444.444.444
+---------------------+
是否有人知道失态在哪里?
答案 0 :(得分:3)
您要删除第一项,而您需要删除列表中第一次出现的项目:
var index = ipList.IndexOf(new_ip);
if(index >= 0)
ipList.RemoveAt(index);
答案 1 :(得分:0)
做一些像
这样的事情 Dictionary<string, int> ipList = new Dictionary<string, int>();
if (!ipList.ContainsKey(new_ip))
{
// new ip that exists once.
ipList.Add(new_ip, 0);
}
else
{
// dupliate ip - increment number of times duplicated
ipList[new_ip] += 1;
}
foreach (KeyValuePair<string,int> value in ipList)
{
textBox1.Text += string.Format(@"IP:{0} Duplicated: {1}\r\n", value.Key, value.Value);
}