Как обрабатывать карту на основе ключей?
Если на моей карте ключ равен моей переменной, тогда я хочу создать список, содержащий мою карту
Если в моем сопоставить ключ не равен моей переменной; тогда я хочу создать список, содержащий 2 объекта карты с ключом, имеющим ближайшее меньшее значение, и ключом с ближайшим более высоким значением
int myVar = 100;
Map values = {
"-900" : 183,
"-800" : 164,
"-700" : 144,
"-600" : 124,
"-500" : 104,
"-400" : 84,
"-300" : 63,
"-200" : 42,
"-100" : 21,
"0" : 0,
"100" : -22,
"200" : -43,
"300" : -64
};
Для примера с myVar = 100 я хочу иметь это:
int myVar = 100;
Map values = {
"100" : -22,
};
И если myVar = 112, например, мне нужно иметь ближайшие значения ключей. Мой результат должен быть:
Map values = {
"100" : -22,
"200" : -43,
};
Я не знаю, как это сделать. Возможно, мне пришла идея преобразовать карту в список карт, чтобы иметь возможность использовать функции списка.
List<Map> values = [
{
"arg1" :-900,
"arg2": 183
},
{
"arg1" :-800,
"arg2": 164
},
{
"arg1" :-700,
"arg2": 144
},
// Some other values ...
];
List newValues = values.where((c) => c['arg1'] == 100).toList();
это правильный метод? Как преобразовать мою карту basi c, если да?
EDIT : Я пробовал это с помощью @jamesdlin, но у меня возникла ошибка.
import 'dart:collection';
void main() {
int myVar = 100;
Map<int, int> values = {
-900 : 183,
-800 : 164,
-700 : 144,
-600 : 124,
-500 : 104,
-400 : 84,
-300 : 63,
-200 : 42,
-100 : 21,
0 : 0,
100 : -22,
200 : -43,
300 : -64
};
print(values);
Map<int, int> filter(int myVar, SplayTreeMap<int, int> values) {
if (values.containsKey(myVar)) {
return {myVar: values[myVar]};
}
int lowerKey = values.lastKeyBefore(myVar);
int upperKey = values.firstKeyAfter(myVar);
return {
if (lowerKey != null) lowerKey: values[lowerKey],
if (upperKey != null) upperKey: values[upperKey],
};
}
print(filter(myVar, values));
}
У меня на дартпаде есть:
: TypeError: Instance of 'JsLinkedHashMap<int, int>': type 'JsLinkedHashMap<int, int>' is not a subtype of type 'SplayTreeMap<int, int>'Error: TypeError: Instance of 'JsLinkedHashMap<int, int>': type 'JsLinkedHashMap<int, int>' is not a subtype of type 'SplayTreeMap<int, int>'