簡體   English   中英

如何將兩個列表組合到一個列表中 <KeyValuePair<> &gt;?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM