有两个清单:
List<string> files;
List<Filter> filters;
我希望结果如下:
List<KeyValuePair<string, Filter>> fileFilterMap;
我尝试了几种东西(lambda表达式,linq)但是失败了。
我真的不想要 for(int i = 0; i< files.count; i++)
方法
答案 0 :(得分:13)
您可以使用:
List<KeyValuePair<string, Filter>> fileFilterMap =
Enumerable.Range(0, files.Count)
.Select(i => new KeyValuePair<string, Filter>(files[i], filters[i]))
.ToList();
或者:
List<KeyValuePair<string, Filter>> fileFilterMap =
Enumerable.Zip(
files,
filters,
(file, filter) => new KeyValuePair<string, Filter>(file, filter)
)
.ToList();
答案 1 :(得分:5)
var fileFilterMap = Enumerable.Zip(files, filters, (file, filter) => new KeyValuePair(file, filter));
答案 2 :(得分:2)
假设你的意思是两个列表开始时彼此同步,那么
var fileFilterMap = files.Select((s, i) => new KeyValuePair<string, int>(s, filters[i])).ToList();
会工作。
那说,for(int i; i != files.Count; ++i)
出了什么问题。我认为这是优越的(稍微快一点,更清晰)。
答案 3 :(得分:1)
认为您的Filter
类包含属于它的属性Prop,这是摘录。
public class Filter {
public String Prop { get; set; }
}
static void Main(string[] args) {
var strings = new List<String>();
var filters = new List<Filter>();
var result = strings.Select(x => new KeyValuePair<string, Filter>(x,filters.FirstOrDefault(y => y.Prop == x)))
.ToList();
Console.ReadLine();
}
答案 4 :(得分:1)
这是一个可能的解决方案,虽然它不是很漂亮..(因为它对文件中的每个项目进行了IndexOf查找。并且它要求文件中的每个条目都唯一。)
List<string> files = new List<string>();
List<Filter> filters = new List<Filter>();
List<KeyValuePair<string, Filter>> fileFilterMap =
files.ToDictionary(
file => file, // key selector
file => filters[files.IndexOf(file)] // item selector
).ToList();
答案 5 :(得分:1)
List<KeyValuePair<string, Filter>> fileFilterMap = new List<KeyValuePair<string, Filter>>();
files.All(a => { fileFilterMap.Add(new KeyValuePair<string, Filter>(a, filters[files.IndexOf(a)])); return true; });
答案 6 :(得分:0)
var fileFilterMap = files.Zip(filters, (file, filter) => new KeyValuePair<string,Filter>(file, filter)).ToList();