比较两个列表并将匹配结果提供给另一个C#

时间:2015-04-23 10:06:08

标签: c# string list

我是电子工程师。

我在C#中为Windows窗体应用程序制作的程序中有一个问题 我需要你的帮助才能解决它。我有两个字符串[num]和[work]列表,大小相同,[num]的每个值对应于[work],如下所示:

num work
11  0,4
23  0,5
36  0,333
49  13
...

然后我的字符串列表[lnum]几乎就像[num]但是数字少了这样的数字:

lnum
23
36
49
...

而我想要做的是获得与lnum中存在的数字相对应的值 像这样:

lnum lwork
23   0,5    
36   0,333
49   13
...  

我开发的代码就是:

List<string> num = new List<string>();
List<string> work = new List<string>();

List<string> lnum = new List<string>();
List<double> lwork = new List<double>();

for (int i = 0; i < num.Count; i++)
{
    for (int j = 0; j < lnum.Count; j++)
    {
        if(lnum[j] == num[i])
        {
            lwork.Add(Convert.ToDouble(work[j].ToString()));
        }
    }
}

现在的问题是,如果数字列表中有很多变量,我似乎并没有这样做。我做错了什么?做这个的最好方式是什么?我需要对代码进行哪些更改?

如果您需要进一步解释,我会尝试更详细地解释。对于英语中的任何错误,我很抱歉,葡萄牙语和英语不是我的自然语言,如果标题没有更好地描述我的斗争,那么我就是apolagyse。

我真的非常需要你的帮助,我将永远感激你的帮助。 我希望你们所有人度过最美好的周末!

2 个答案:

答案 0 :(得分:1)

根据您numwork列表构建词典:

Dictionary<string,string> lookup = new Dictionary<string,string>();
for(int i = 0; i < num.Count; i++)
    lookup.Add(num[i], work[i]);

使用此查找字典可以轻松创建新配对:

for(int i = 0; i < lnum.Count; i++)
{
    string lkey = lnum[i];
    string lwork = lookup[lkey];
    ....
}

当然,您应该添加一些错误处理,例如lnum包含lookup中找不到的字符串

答案 1 :(得分:0)

您可以使用linq选择lwork值:

Dictionary<String, String> origin = new Dictionary<String, String>();
            // TODO populate origin with key = num and value = work
            PopulateOrigin(origin);

            List<String> lnum = new List<String>();
            // TODO populate lnum list
            PopulateLNum(lnum);

            List<Double> lwork = origin.Where(kv => lnum.Contains(kv.Key)).Select(kv => Convert.ToDouble(kv.Value)).ToList<Double>();