Ich habe eine App gemacht, die Daten über IP speichert. Nehmen wir an, meine IP ändert sich alle 1 Minute. Wenn ich nicht neue IP hatte, fügen Sie es der Textbox hinzu. Wenn ich - hatte "Duplicate"
in Textfeld hinzufügen.Warum ändert sich die Reihenfolge meines Arrays, wenn ich das erste Element an das Ende verschiebe
Was ich getan habe, ist eine Liste von Zeichenfolgen erstellt. Die App fügt jede new_ip
Variable zu List hinzu. Wenn es einzigartig ist, behalte es. Wenn nicht, löschen Sie zuerst den Wert List
und fügen Sie "Duplicate"
zu textBox
hinzu.
Ich weiß nicht, warum sich meine Bestellung ändert. Der Code ist:
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;
}
Hier ist ein kurzes Beispiel. Richtige Reihenfolge von ip sollte sein:
11.111.111.111
duplicate 1
22.222.222.222
duplicate 2
33.333.333.333
44.444.444.444
Aber unfortunelly die App gaben mir dies:
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
+---------------------+
hat jemand eine Idee, wo ist der Fauxpas?
Sie das erste Element aus der Liste zu entfernen und es dann erneut Hinzufügen ... haben Sie versucht, durch den Code treten? – pquest
Sie löschen nicht die erste Instanz des doppelten Werts, Sie löschen nur das erste Element aus der Liste, unabhängig davon, was es ist. – itsme86
Ihre GroupBy erkennt Duplikate, aber Sie entfernen die Duplikate nicht aus der Liste. Sie entfernen das erste Element aus der Liste, ob das ein Duplikat ist oder nicht. Versuchen Sie etwas wie 'var dupes = ipList.GroupBy (n => n). Wo (c => c.Count()> 1);'. Wirklich, Sie möchten eine neue Liste von Nicht-Duplikaten erstellen, dann jedes Duplikat an die neue Liste mit "Duplicate:" anfügen, die jedem vorangestellt sind, und die alte Liste durch die neue ersetzen. Viel einfacher, so zu denken. –