[英]How do I combine two lists to a List<KeyValuePair<>>?
有兩個列表:
List<string> files;
List<Filter> filters;
我希望結果如下:
List<KeyValuePair<string, Filter>> fileFilterMap;
我嘗試了幾個東西(lambda表達式,linq)但失敗了。 我真的不想要
for(int i = 0; i< files.count; i++)
方法。
您可以使用:
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();
看看Enumerable.Zip 。
var fileFilterMap = Enumerable.Zip(files, filters, (file, filter) => new KeyValuePair(file, filter));
假設你的意思是兩個列表開始時彼此同步,那么
var fileFilterMap = files.Select((s, i) => new KeyValuePair<string, int>(s, filters[i])).ToList();
將工作。
那就是說, for(int i; i != files.Count; ++i)
。 我認為這是優越的(稍快,更清晰)。
認為您的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();
}
這是一個可能的解決方案,雖然它不是很漂亮..(因為它對文件中的每個項目進行了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();
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; });
var fileFilterMap = files.Zip(filters, (file, filter) => new KeyValuePair<string,Filter>(file, filter)).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.