为什么我的数组';当我把第一个项目移到最后时,它的顺序发生了变化
本文关键字:最后 变化 发生了 顺序发生 顺序 项目 数组 我的 第一个 为什么 | 更新日期: 2023-09-27 17:59:01
我制作了一个存储ip数据的应用程序。假设我的ip每1分钟更改一次。如果我在把它添加到文本框之前没有新的ip。如果我在文本框中添加了"Duplicate"
。
我所做的是创建一个字符串列表。该应用程序正在将每个new_ip
变量添加到列表中。如果它是唯一的,则保留它。如果不是,则删除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
+---------------------+
有人知道失态在哪里吗?
您正在删除第一个项目,而您需要删除列表中第一个出现的项目:
var index = ipList.IndexOf(new_ip);
if(index >= 0)
ipList.RemoveAt(index);
此外,为了检查列表中是否存在新ip,您不需要分组依据,只需使用IndexOf
或Contains
方法即可。
只需做一些类似的事情
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);
}