簡體   English   中英

使用LINQ重新映射C#中的查找鍵

[英]Remap Lookup keys in C# using LINQ

我的查找如下所示:

Lookup<string, DataModel> lookup;

除此之外,我還有包含鍵映射的字典:

Dictionary<string, KeyModel> keyMappings;

我想要做的是通過以下方式將查找中的字符串鍵重新映射到KeyModel實體:

Lookup    <string, DataModel> lookup;
             ||
             ||
Dictionary<string, KeyModel> keyMappings;
            ___________|
           v
Lookup<KeyModel, DataModel> result; 

鑒於:

Dictionary<string, KeyModel> keyMappings = ...;
ILookup<string, DataModel> lookup = ...;

響應是:

ILookup<KeyModel, DataModel> lookup2 = lookup
    .SelectMany(x => x, (grouping, element) => new { Key = keyMappings[grouping.Key], Element = element })
    .ToLookup(x => x.Key, x => x.Element);

因此,您首先使用SelectMany重新線性化ILookup<,> ,然后重新創建ILookup<,>

顯然,您需要KeyModel來定義GetHashCode()Equals() ,或者需要IEqualityComparer<KeyModel>作為ToLookup()的參數傳遞

您可以使用簡單的foreach -loop。

首先,您需要將Lookup轉換為Dictionary。 這里

foreach (KeyValuePair<string, DataModel> kvp in lookup) {
KeyModel outValue;
if (keyMappings.TryGetValue(kvp.Key, out outValue))
{
    result.Add(outValue, lookup[kvp.Key]);
}}

不是最快的解決方案,也許有人想出了一個不錯的LINQ。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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