【问题标题】:How to find and remove an anonymous object in one of 7 SortedLists in a List?如何在列表中的 7 个 SortedLists 之一中查找和删除匿名对象?
【发布时间】:2017-05-18 22:12:53
【问题描述】:

项目可以在任何列表中。但每个项目只有一次。其他列表之一中不应有相同(或相似)的项目。

这是我的课。

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
    }
}

要删除一个项目,我尝试了这样的方法:

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

但这显然行不通。

这是我添加项目的方法。但这应该很明显:

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;
        }
    }

起初我使用 List&lt;List&lt;Item&gt;&gt;,但我发现 SortedList 更易于处理。

【问题讨论】:

  • 你试过用for循环代替吗?
  • 是的。也没有用。
  • 我没看到你在列举第二个列表,以foreach(var list in lists){ list.RemoveWhere(x =&gt; x.key == key);}为例...
  • 看来我没有(访问)方法.RemoveWhere()

标签: c# list anonymous


【解决方案1】:

问题是您要从 SortedKey 而不是列表中删除。我解释你的意图是从列表中删除 SortedList,如果这是你的意图,一种方法是:

        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);
            }
        }

【讨论】:

  • 我的意图是删除其中一个 SortedLists 中的一项。但首先(因为我不知道它在里面的 SortedList 中)我需要找到 Item。
【解决方案2】:

好的。我想出了解决方案。 我的逻辑没有问题。

我用来查找和删除Item的字符串来自这个:

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

但显然在字符串之前保留了一个空格。所以我添加了这段代码,现在它可以工作了:

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

【讨论】:

  • 旁注:myString.Trim() 将自动删除字符串开头和结尾处的所有空白字符和换行符(但不在中间)。如果您只想修剪字符串的一侧,还有TrimStart().TrimEnd()
猜你喜欢
  • 2021-05-13
  • 2013-05-07
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多