пересечь словарь и список, чтобы вернуть другой словарь - PullRequest
0 голосов
/ 21 февраля 2019

Как передать список заголовков и получить пары ключ / значение?

Я создал метод, подобный следующему:

public static IDictionary<string, string> GetHeaderValues(
    IReadOnlyList<string> keys, IHeaderDictionary headers)
{
}

Я хотел бы передать список строк, таких как "trackingId, requestId, corrId", и получить словарь, например, так:

trackingId: 123123
requestId: abc123123
corrId: xyz123

Цель этого состоит в том, чтобы передать ВСЕ заголовки и получить толькожелаемые заголовки.

Как мы пересекаем эти два объекта IReadOnlyList и IHeaderDictionary и map в обычный IDictionary?

Я пытался пересечьдва со следующим:

headers.Keys.Intersect(keys); однако это вернет неперечисляемую строку.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

короткий псевдокод :

intersect(keys1,keys2)        // get common keys list
    |> map to (key,value)     // map to key-value pair list
    |> to dictionary           // convert list to dict

C # Реализация:

public static IDictionary<string, string> GetHeaderValues(IReadOnlyList<string> keys, IHeaderDictionary headers)
{
    return keys.Intersect(headers.Keys)
        .Select(k => new KeyValuePair<string,string>(k,headers[k]))
        .ToDictionary(p => p.Key, p => p.Value);
}

Контрольный пример:

var list = new List<string>{
    "Content-tyb3",  // non-exist
    "Cookie",        
    "Accept-Language",
    "Program",      // non-exist
};
var headers = GetHeaderValues(list,Request.Headers);
0 голосов
/ 21 февраля 2019

Вы можете объединить свои ключи с заголовками, а затем превратить этот результат в словарь, например, но значение может быть не одной строкой.В этом решении я вызвал ToString () для объекта StringValue, который может быть не тем, что вы хотите, но именно это показывает сигнатура вашего метода:

public static IDictionary<string, string> GetHeaderValues(
    IReadOnlyList<string> keys, IHeaderDictionary headers)
{
    return headers
    .Join(keys, h => h.Key, k => k, (h, k) => h)
    .ToDictionary(h => h.Key, h => h.Value.ToString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...