#c# #arrays #asp.net
Вопрос:
Я пытаюсь написать метод, который должен возвращать значение элемента на основе индекса значения и условия.
Например, в приведенном ниже примере, если я передаю значение индекса как 0, оно должно возвращать ключи и первое значение из целочисленного массива, не имеющего значения 5.
public static Dictionary<string, int[]> _dict = new Dictionary<string, int[]>()
{
{"A", [1,0,3] },
{"B", [5,1,5] },
{"C", [7,11,5] },
{"D", [0,1,5]},
{"E", [14,0,5] },
{"F", [5,1,5] }
};
Ожидаемый O/P:
если я передам значение индекса 0 и условие как != 5, то O/P должно быть
{
{"A", 1 },
{"C", 7 },
{"D", 0 },
{"E", 14}
};
Комментарии:
1. Какова ваша подпись метода? И что вы пробовали до сих пор?
2. Не могли бы вы, пожалуйста, показать нам свои попытки и то, что у вас не получается?
3. Приведенный выше код не компилируется и является недопустимым.
4. Если вы заинтересованы в получении помощи, предоставление действительного кода-это своего рода хорошее начало. Каждая строка инициализации вашего словаря должна выглядеть примерно так
{"A", new []{1,0,3} },
. Когда вы говорите «Ожидаемый O/P:» , что такое O/P?
Ответ №1:
Вы могли бы достичь этого в два этапа:
- Получите те предметы, которые не начинаются с
5
var res = _dict.Where(a => a.Value[0] !=5);
- Затем заполните новый словарь оставшимися ключами и первой записью в их целочисленном массиве
foreach(KeyValuePair<string,int[]> keyValuePair in res)
{
result.Add(keyValuePair.Key, keyValuePair.Value[0]);
}
или с помощью LINQ
result = res.ToDictionary(keyValue => keyValue.Key, keyValue => keyValue.Value[valueIndex]);
Полный код будет выглядеть примерно так
public static Dictionary<string, int[]> _dict = new Dictionary<string, int[]>()
{
{"A", new int[] {1,0,3 } },
{"B", new int[] {5,1,5} },
{"C", new int[] {7,11,5} },
{"D", new int[] {0,1,5}},
{"E", new int[] {14,0,5} },
{"F", new int[] {5,1,5} }
};
static Dictionary<string, int> GetResult(int valueIndex, Func<KeyValuePair<string, int[]>, bool> predicate) =>
_dict.Where(predicate)
.ToDictionary(keyValue => keyValue.Key, keyValue => keyValue.Value[valueIndex]);
GetResult(valueIndex: 0, predicate: a => a.Value[0] != 5)
затем дает желаемый результат
{
{"A", 1 },
{"C", 7 },
{"D", 0 },
{"E", 14}
};
Комментарии:
1. Когда индекс не существует в массиве, он выдаст ошибку
IndexOutOfRangeException
. Было бы лучше сначала проверить это.
Ответ №2:
Код одной строки с использованием LINQ
var result = _dict.Where(x => x.Value[0] != 5).ToDictionary(x => x.Key, y => y.Value[0]);