Технически, если вы хотите, скажем, List<object> == {1, "A", 4, "D", 5, "E"};
Я ожидаю, что результат будет выглядеть как {1,A,4,D,5,E}
, вы можете попробовать Where
, чтобы отфильтроватьdict
записей и SelectMany
их сглаживание:
Dictionary<int, string> dict = new Dictionary<int, string>() {
{1, new "A"},
{2, new "B"},
{3, new "c"},
{4, new "D"},
{5, new "E"},
};
string[] values = new [] {"A", "D", "E"};
var result = dict
.Where(pair => values.Contains(pair.Value))
.SelectMany(pair => new object[] { pair.Key, pair.Value})
.ToList();
Console.Write(string.Join(", ", result));
Результат:
1, A, 4, D, 5, E
Однако я сомневаюсь, действительно ли вам нужно такое странное представление данных.Отфильтрованная коллекция (или словарь) без SelectMany
более удобна:
List<KeyValuePair<int, string>> result = dict
.Where(pair => values.Contains(pair.Value))
.ToList();
Console.Write(string.Join(", ", result.Select(pair => $"{pair.Key}, {pair.Value}")));
или
Dictionary<int, string> result = dict
.Where(pair => values.Contains(pair.Value))
.ToDictionary(pair => pair.Key, pair => pair.value);
Console.Write(string.Join(", ", result.Select(pair => $"{pair.Key}, {pair.Value}")));
, которые дают тот же результат:
1, A, 4, D, 5, E
Редактировать: Ну, проблема сильно изменилась .Теперь у нас есть
Dictionary<int, List<string>> dict = new Dictionary<int, <string>>() {
{1, new List<string>() {"A", "B"}},
{2, new List<string>() {"C", "D"}},
{3, new List<string>() {"G", "H"}},
{4, new List<string>() {"E", "F"}},
{5, new List<string>() {"I", "J"}},
};
string[] values = new [] { "A", "D", "E" };
И мы хотим отфильтровать Dictionary<int, List<string>>
:
var result = dict
.Select(pair => new {
key = pair.Key,
value = pair.Value.Intersect(values).ToList()
})
.Where(item => item.value.Any())
.ToDictionary(item => item.key, item => item.value);
Console.Write(string.Join(Environment.NewLine, result
.Select(pair => $"{pair.Key} : [{string.Join(", ", pair.Value)}]")));
Результат:
1 : [A]
2 : [D]
4 : [E]