【问题标题】:C# get array from dictionary with respect to other arrayC# 从字典中获取相对于其他数组的数组
【发布时间】:2016-10-14 10:12:55
【问题描述】:

我有这样的数据:

Dictionary<string, string> dic = new Dictionary<string, string>();    
dic.Add("1", "ABC1");    
dic.Add("2", "ABC2");    
dic.Add("3", "ABC3");    
dic.Add("4", "ABC4");    
dic.Add("5", "ABC5");    
dic.Add("6", "ABC6");  
string[] col = new string[] { "1", "4", "5" };

需要一个与 col 数组顺序相同的结果字符串数组,例如:

string[] res = new string[] { "ABC1", "ABC4", "ABC5" }; 

尝试使用 for 循环,但在 linq 中需要

string[] res = new string[col.Length]; // { "ABC1", "ABC4", "ABC5" };

for(int i=0;i<col.Length;i++)
{
    res[i] = dic[col[i]];
}

【问题讨论】:

  • 提示:LINQ 的 Select 和 ToArray 方法使这变得非常简单。
  • 我看到一个 LINQ 标记,但没有证据表明您尝试使用 LINQ 解决此问题?

标签: c# arrays linq dictionary


【解决方案1】:

不安全的方法是直接从字典中Select

var result = col.Select(c => dic[c]).ToArray();

但更建议检查key是否在字典中以避免异常

var result = col.Where(c => dic.Keys.Contains(c))
                .Select(c => dic[c])
                .ToArray();

【讨论】:

    【解决方案2】:

    试试这个:

    var result = dic.Where(k => col.Contains(k.Key)).Select(v => v.Value).ToArray();
    

    【讨论】:

    • string[] col = new string[] { "1", "5", "4" };如果 col 数组是这样的,那么结果仍然是 lke { "ABC1", "ABC4", "ABC5" };但我想要 { "ABC1", "ABC5", "ABC4" };
    • 对。那么@GiladGreen 的回答应该可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2018-12-04
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多