【问题标题】:getting rid of white space in List<string> that resides in Dictionary摆脱字典中的 List<string> 中的空白
【发布时间】:2013-02-17 12:37:48
【问题描述】:

我有一个字典,其中一个字符串作为键,一个列表作为值。

Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();

因此,对于每个键,都有几个与该键关联的字符串值。 问题是列表值包含一些我需要摆脱的空白,我所做的是使用 trim() 方法将每个列表值的值传递给不同的列表,然后在循环之后将其分配回原始列表。

List<string> lstNoWhite = new List<string>();
foreach (var kvp in dict)
{

    for(int i = 0; i < kvp.Value.Count; i++)
    {
        lstNoWhite.Add(kvp.Value[i].Trim());
    }
    kvp.Value = lstNoWhite;
}

但是我确实得到了错误...由于列表是只读的,因此无法分配给它。

哪种方法可以更好地去除空白?

【问题讨论】:

  • 您得到的错误将是来自foreach 块中最后一行的编译时错误。你的kvpKeyValuePair&lt;,&gt;,而Value 属性有一个getter 但没有setter,所以你不能分配给它。相反,您可以说:kvp.Value.Clear(); /* empties list */ kvp.Value.AddRange(lstNoWhite); /* adds many values to list */ 还要考虑是否需要为dict 中的每个kvp 重用相同的lstNoWhite,甚至不使用lstNoWhite.Clear()

标签: c# list dictionary trim


【解决方案1】:

试试这个代码:

// source dictionary
Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();

// target dictionary
Dictionary<string, List<string>> target = new Dictionary<string, List<string>>();

// using LINQ extension methods
dict.ToList().ForEach(i =>
{
    List<string> temp = i.Value.Select(x => x.Trim()).ToList();
    target.Add(i.Key, temp);
});

【讨论】:

    【解决方案2】:

    您可以稍微修改您的代码以摆脱中间列表:

    foreach (var kvp in dict)
            {
                for(int i = 0; i < kvp.Value.Count; i++)
                {
                    kvp.Value[i] = kvp.Value[i].Trim();
                }
            }
    

    这将修剪列表中所有字符串中的所有空格

    【讨论】:

    • 似乎是最优雅的解决方案,并且不需要在此过程中创建新的List&lt;&gt;Dictionary&lt;,&gt;。当然,它假设(就像问题中的原始代码一样)字典中没有值是nullList&lt;string&gt; 类型),并且任何列表中都没有字符串是null(@987654327 类型) @)。
    【解决方案3】:

    您也可以这样做:

    Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
    
    // var --> Dictionary<string, List<string>>
    var trimmedDict = dict.ToDictionary(
        keyValue => keyValue.Key, // The key
        keyValue => keyValue.Value.Select(s => s.Trim()).ToList() // The value, trim all the strings in the value-list
    );
    

    【讨论】:

    • 不解释就投反对票似乎总是那么有意义。 叹息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多