我正在尝试创建一个包含两个序列的索引和匹配元素的字典。 例如: -
List<string> A = new List<string> { "a", "b", "c", "d", "e", "f", "g" };
List<string> B = new List<string> { "a", "d", "e", "f" };
现在我想构建一个看起来像这样的字典。
// Expected Output:-
// { "a" , 0 }
// { "d" , 3 }
// { "e" , 4 }
// { "f" , 5 }
其中字典中的第一个条目是两个列表中的公共元素,第二个条目是第一个列表中的公共元素(A)。 不确定如何使用Lambda Expression来表达这一点。
答案 0 :(得分:3)
为此,B
中的每个元素都使用IndexOf
集合中的A
。然后使用ToDictionary
将其转换为您想要的字典表格
List<string> A = new List<string> { "a", "b", "c", "d", "e", "f", "g" };
List<string> B = new List<string> { "a", "d", "e", "f" };
var result = B.Select(item => new { item, Position = A.IndexOf(item) })
.ToDictionary(key => key.item, value => value.Position);
请注意,B
中的项目必须是唯一的才能在KeyAlreadyExists
上失败。在那种情况下:
var result = B.Distinct()
.Select(item => new { item, Position = A.IndexOf(item) })
.ToDictionary(key => key.item, value => value.Position);
如果您不希望找到未找到的项目的结果:
var result = B.Distinct()
.Select(item => new { item, Position = A.IndexOf(item) })
.Where(item => item.Position != -1
.ToDictionary(key => key.item, value => value.Position);
答案 1 :(得分:0)
这应该这样做:
List<string> A = new List<string>{"a","b","c","d","e","f","g"};
List<string> B = new List<string>{"a","d","e","f"};
var result = B.ToDictionary(k => k, v => A.IndexOf(b)});
答案 2 :(得分:0)
试试这个:
List<string> A = new List<string> { "a", "b", "c", "d", "e", "f", "g" };
List<string> B = new List<string> { "a", "d", "e", "f" };
Dictionary<string, int> result = B.ToDictionary(x => x, x => A.IndexOf(x));