Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较两个列表并将匹配结果提供给另一个C#_C#_String_List - Fatal编程技术网

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

比较两个列表并将匹配结果提供给另一个C#,c#,string,list,C#,String,List,我是一名电子工程师 我用C#为Windows窗体应用程序编写了一个程序 我需要你的帮助来处理这件事。我有两个相同大小的字符串[num]和[work]列表,[num]的每个值对应于如下所示的[work]: num work 11 0,4 23 0,5 36 0,333 49 13 ... lnum 23 36 49 ... lnum lwork 23 0,5 36 0,333 49 13 ... 然后我得到了字符串列表[lnum],它几乎类似于[num],但像

我是一名电子工程师

我用C#为Windows窗体应用程序编写了一个程序 我需要你的帮助来处理这件事。我有两个相同大小的字符串[num]和[work]列表,[num]的每个值对应于如下所示的[work]:

num work
11  0,4
23  0,5
36  0,333
49  13
...
lnum
23
36
49
...
lnum lwork
23   0,5    
36   0,333
49   13
...  
然后我得到了字符串列表[lnum],它几乎类似于[num],但像这样的数字较少:

num work
11  0,4
23  0,5
36  0,333
49  13
...
lnum
23
36
49
...
lnum lwork
23   0,5    
36   0,333
49   13
...  
我想做的是得到lnum中存在的数字对应的值 像这样:

num work
11  0,4
23  0,5
36  0,333
49  13
...
lnum
23
36
49
...
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()));
        }
    }
}
List num=new List();
列表工作=新列表();
List lnum=新列表();
List lwork=新列表();
对于(int i=0;i
现在的问题是,如果数字列表有很多变量,我似乎没有按照正确的方式来做。我做错了什么?最好的方法是什么?我需要对代码进行哪些更改

如果你需要更多的解释,我会尽量解释得更详细。对不起,英语中有任何错误,我是葡萄牙人,英语不是我的母语,如果标题不能更好地描述我的奋斗,我深表歉意

我真的很需要你的帮助,我会永远感激你的帮助。
我希望你们度过一个最好的周末

从您的
num
work
列表中创建词典:

Dictionary<string,string> lookup = new Dictionary<string,string>();
for(int i = 0; i < num.Count; i++)
    lookup.Add(num[i], work[i]);
字典查找=新建字典();
对于(int i=0;i
使用此查找字典,可以轻松创建新的配对:

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

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

,您可以使用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>();
Dictionary origin=newdictionary();
//TODO使用key=num和value=work填充原点
人口起源(起源);
List lnum=新列表();
//TODO填充lnum列表
人口数(lnum);
列出lwork=origin.Where(kv=>lnum.Contains(kv.Key)).Select(kv=>Convert.ToDouble(kv.Value)).ToList();

如果两个列表都是通过索引链接的,则改用
字典(如果不可能有重复的
Num
),或者创建一个具有两个属性的类并填充
列表。这看起来像是一个“SortedDictionary”可以满足您的需要(或在其他语言中是“map”)您想要交叉列表吗?如果是,那么看一看你似乎需要我不认为这个代码片段做什么OP是要求。也许,如果需求没有代码,我们可以建议实现它的方法?