2017-05-18 1 views
0

Das Element kann in einer der Listen enthalten sein. Aber jedes Item nur einmal. Es sollte nicht das gleiche (oder ähnliche) Element in einer der anderen Listen sein.Wie finden und entfernen Sie ein anonymes Objekt in einer von 7 SortedLists in einer Liste?

Hier ist meine Klasse.

class Calendar 
{ 
    public List<SortedList<string, Item>> list; 

    public Item() 
    { 
     list = new List<SortedList<string, Item>>(); //List of Week 
     list.Add(new SortedList<string, Item>()); //Monday 
     list.Add(new SortedList<string, Item>()); //Tuesday 
     list.Add(new SortedList<string, Item>()); //Wednesday 
     list.Add(new SortedList<string, Item>()); //Thursday 
     list.Add(new SortedList<string, Item>()); //Friday 
     list.Add(new SortedList<string, Item>()); //Saturday 
     list.Add(new SortedList<string, Item>()); //Sunday 
    } 
} 

ein Element zu entfernen, habe ich versucht, so etwas wie dieses:

public void RemoveItem(string key) 
{ 
    foreach (SortedList<string, Item> item in list) 
    { 
     if (item.Keys.Contains(key)) 
     { 
      item.Remove(key); 
     } 
    } 
} 

aber anscheinend nicht funktioniert.

Hier ist, wie ich die Elemente hinzufügen. Aber das sollte klar sein:

public void AddItem(string Day, Item i) 
    { 
     string s = i.Title 
     switch (Tag) 
     { 
      case "Monday": 
       list[0].Add(s, i); 
       break; 
      case "Tuesday": 
       list[1].Add(s, i); 
       break; 
      case "Wednesday": 
       list[2].Add(s, i); 
       break; 
      case "Thursday": 
       list[3].Add(s, i); 
       break; 
      case "Friday": 
       list[4].Add(s, i); 
       break; 
      case "Saturday": 
       list[5].Add(s, i); 
       break; 
      case "Sunday": 
       list[6].Add(s, i); 
       break; 
      default: 
       list[0].Add(s, i); 
       break; 
     } 
    } 

Zuerst habe ich List<List<Item>> aber ich herausgefunden, dass ein SortedList einfacher ist für meine Zwecke zu behandeln.

+0

Haben Sie versucht, stattdessen eine For-Schleife? –

+0

ja. hat auch nicht funktioniert. –

+0

Ich sehe nicht, dass Sie die zweite Liste auflisten, 'foreach (var Liste in Listen) {list.RemoveWhere (x => x.key == Schlüssel);}' als ein Beispiel ... –

Antwort

0

Das Problem ist, dass Sie aus dem SortedKey nicht die Liste entfernen. Ich interpretierte Ihre Absicht ist es, den SortedList aus der Liste zu entfernen, wenn das Ihre Absicht ist es, eine Möglichkeit zu tun wäre:

 private void GoHere() 
     { 
      var list = new List<SortedList<string, string>>(); //List of Week 
      list.Add(new SortedList<string, string>() {{"monday", "monday"}}); //Monday 
      list.Add(new SortedList<string, string>() {{"tues", "monday"}}); //Tuesday 
      list.Add(new SortedList<string, string>() {{"wed", "monday"}}); //Wednesday 
      list.Add(new SortedList<string, string>() {{"thurs", "monday"}}); //Thursday 
      list.Add(new SortedList<string, string>() {{"fri", "monday"}}); //Friday 
      list.Add(new SortedList<string, string>() {{"sun", "monday"}}); //Saturday 
      int? index = null; 

      for (int i = 0; i < list.Count; i++) 
      { 
       SortedList<string, string> sortedList = list[i]; 
       if (sortedList.ContainsKey("wed")) 
       { 
        index = i; 
        break; 
       } 
      } 
      if (index.HasValue) 
      { 
       list.RemoveAt(index.Value); 
      } 
     } 
+0

Meine Absicht ist es, ein Element zu entfernen, das sich in einer der SortedLists befindet. Aber zuerst (weil ich nicht weiß, in welcher SortedList es drin ist) muss ich das Item finden. –

0

Okay. Ich habe die Lösung herausgefunden. Es gab kein Problem mit meiner Logik.

Die Saite, die ich verwendet zu finden und das Einzelteil kam aus dieser löschen:

string[] seperators = { "|" }; 
string[] s = "Name | Title".Split(seperators, StringSplitOptions.RemoveEmptyEntries); 
Calendar.RemoveItem(s[1]); 

aber apperently ein Raum wurde vor dem String gehalten. Also habe ich diesen Code hinzugefügt und jetzt funktioniert es:

string title = s[2].Remove(0, 1); 
Calendar.RemoveItem(title); 
+0

Hinweis: 'myString.Trim()' entfernt automatisch alle Leerzeichen und Zeilenumbrüche am Anfang und Ende der Zeichenfolge (aber nicht in der Mitte). Es gibt auch einen 'TrimStart()' und '.TrimEnd()', wenn Sie nur eine Seite des Strings trimmen wollen. – Flater

Verwandte Themen