如何在C#中匹配两个列表的项目?

时间:2016-10-13 05:01:33

标签: c# .net list

我想基于List_Position得到list_ID值。 我应该怎么做?感谢

List<int> list_ID = new List<int> (new int[ ] { 1, 2, 3, 4, 5 });

List<string> list_Position = new List<string> (new string[ ] { A, C, D, B, E});

A = 1,

B = 4,

C = 2,

D = 3,

E = 5,

5 个答案:

答案 0 :(得分:14)

此刻最佳选择是Dictionary Class,其中list_Position为关键字,list_Position为值,因此您可以根据位置访问值,反之亦然。定义如下:

    Object.keys($scope.generated.codesWithBalance).length

如果您想访问值对应o Dictionary<int, string> customDictionary= new Dictionary<int, string>(); customDictionary.Add(1,"A"); customDictionary.Add(2,"C"); .... 表示您可以使用

2

如果您想获得与特定值对应的键/ s意味着您可以使用如下所示:

string valueAt2 = customDictionary[2]; // will be "C"

如果您仍想使用两个列表,则意味着您可以考虑这个Example这意味着,从var resultItem = customDictionary.FirstOrDefault(x=>x.value=="C"); if(resultItem !=null) // FirstOrDefault will returns default value if no match found { int resultID = resultItem.Key; } 获取所需元素的位置,并获取list_ID列表中此位置的元素,请记住,list_ID的元素数量必须大于或等于list_Position中的元素数量。代码将是这样的:

list_Position

答案 1 :(得分:10)

您可以zip这两个列表,然后在压缩列表上执行linq查询:

int? id = list_Position.Zip(list_ID, (x, y) => new { pos = x, id = y })
                       .Where(x => x.pos == "B")
                       .Select(x => x.id)
                       .FirstOrDefault();

上面的代码返回id = 4

答案 2 :(得分:3)

像这样:

var letterIndex = list_Position.indexOf(B);
var listId = (letterIndex + 1 > list_Id.Count) ? -1 : list_Id[letterIndex];

//listId==4

答案 3 :(得分:3)

而不是使用两个单独的列表,一个用于值,一个用于位置,选择字典,它将使您的生活更轻松,因为它可以封装值和键。

Dictionary<int, string> dictionary = new Dictionary<int, string>();

dictionary.Add(1, "A");
dictionary.Add(2, "B");
dictionary.Add(3, "C");
dictionary.Add(4, "D");
dictionary.Add(5, "E");

您可以在字典上执行的一些操作,例如:

检查字典中是否存在密钥:

if (dictionary.ContainsKey(1))

检查字典中是否存在值:

if (dictionary.ContainsValue("E"))

访问具有特定键的值:

string value = dictionary[1];

使用foreach循环对:

foreach (KeyValuePair<string, int> pair in dictionary )
{
    Console.WriteLine("{0}, {1}", pair.Key, pair.Value);
}

使用var关键字枚举字典

foreach (var pair in dictionary)
{
    Console.WriteLine("{0}, {1}", pair.Key, pair.Value);
}

将密钥存储在List和Loop through列表中。

List<string> list = new List<string>(dictionary.Keys);
foreach (string something in list)
{
    Console.WriteLine("{0}, {1}", something, dictionary[something]);
}

从字典中删除值

dictionary.Remove("A");

答案 4 :(得分:2)

您可以使用Dictionary<int, string>代替List<int>List<string>,如下所示:

Dictionary<int, string> yourDic = new Dictionary<int, string>();
yourDic.Add(1, "A");
// ... and so on