假设我有一个可迭代对象(可以是映射(键)、列表、集合等),并且希望使用 Map() 将其转换为具有函数 f 的另一个可迭代对象。然而,我希望 f 在转换后仅在满足条件时返回一个值。
List<int> a = [1,2,3,4,5,6];
List<int> b = a.map((e) => (e % 2 == 0) ? e * 10 : null);
assert(b == [20,40,60]);
Run Code Online (Sandbox Code Playgroud)
然而,这会返回一个错误,就像map中带有mapEntry的任何类似的等效项一样,例如:
Map<int, String> a = {1:a, 2:b, 3:c, 4:d, 5:e, 6:f};
Map<int, String> b = a.map((k,v) => (k % 2 == 0) ? MapEntry(k*10,v) : null);
assert(b.keys.toList<int>() == [20,40,60]);
Run Code Online (Sandbox Code Playgroud)
当然,有一些方法可以通过牺牲效率和简洁性来解决这个问题,即在映射值之前或之后循环遍历它以过滤掉不需要的值。例如:
List<int> b = a.where((e) => e%2).map((e) => e * 10);
List<int> b = a.map((e) => e * 10).where((e) => e%2); …Run Code Online (Sandbox Code Playgroud) 我想修改地图中的现有项目,例如用新键替换现有键的值,如果键在地图中不存在,则添加一个子句,以简单地创建新键和值一对。Dart 文档为此目的建议了更新方法,但我不太确定如何使用可选的 ifAbsent() 参数来实现它,我假设这是一行代码,如果要更新的密钥不存在.
V update(K key, V update(V value), {V ifAbsent()});
Run Code Online (Sandbox Code Playgroud)
根据文档,有一个可选参数要采用,但它显示一个错误,说参数太多,需要 2 个,但找到 3 个。
这显示没有错误(尚未测试,但理论上应该可以工作):
userData.update(key, value);
Run Code Online (Sandbox Code Playgroud)
这(添加了 create if not exist 子句)执行以下操作:
userData.update(key, value,
userData[key] = value;
);
Run Code Online (Sandbox Code Playgroud)
非常感谢获得后者或等效于工作的任何帮助!我想我在这里遗漏了一些相当明显的东西......
dictionary optional-parameters optional-arguments dart flutter
我正在使用google_maps_flutter并希望在用户在地图上执行手势时执行操作,无论是缩放/倾斜/移动/旋转。但是我无法在GoogleMap 类中使用onCameraMoveStarted属性,因为它也识别非手势用户操作以及编程动画(我的应用程序使用),没有办法(据我所知,否则请纠正我) ,来区分它们。
因此,我想到了使用 flutter 小部件GestureDetector,将地图包裹在其中,以便我能够根据 GestureDetector 检测到的手势更改变量,从而间接导致地图发生变化。
最初没有问题,它充当透明层,地图可以正常移动/倾斜/旋转/缩放。但是,在添加要通过 onPanStart、onPanUpdate 或 onPanEnd 执行的函数后,都会使地图无法通过手势进行交互。我想这一切都被 GestureDetector 捕获了,但是我有没有办法在将手势传递给孩子的同时异步执行上述额外任务?
这是结构,顺便说一句:
build(context) {
return Scaffold(
body: GestureDetector(
behavior: HitTestBehavior.deferToChild,
onPanStart: {...}
child:
GoogleMap(...),
),
...
);
}
Run Code Online (Sandbox Code Playgroud)
提前致谢,非常感谢任何帮助。
if (80 <= m <= 100):
g = "A"
elif (70 <= m < 80):
g = "B"
elif (60 <= m < 70):
g = "C"
elif (50 <= m < 60):
g = "D"
elif (m < 50):
g = "U"
Run Code Online (Sandbox Code Playgroud)
这基本上是一个等级测量代码,它接收值m,意思是标记,并获得等级g.为了同一目的,是否有更短的不一定更多的pythonic方式?
提前致谢.
我只需要接受输入作为数值0 to 100,integers并且floats包含最大 two小数位,并编写正则表达式来检查这些条件.
例如,我希望它接受以下值:
0(min), 0.1, 1, 11, 11.1, 11.11, 100(max).
Run Code Online (Sandbox Code Playgroud)
但不是:
-1, 100.1, 111, 1+1, .1, etc.
Run Code Online (Sandbox Code Playgroud)
到目前为止,我提出了^\d?\d+(\.\d\d?)?$它,但它有一堆问题.
刚才在提交本,我看到这个链接中类似的问题侧边栏有什么似乎是解决("^((?:|0|[1-9]\d?|100)(?:\.\d{1,2})?)$"),但它也接受100.01来100.99.除此之外,这是一个非常小的问题,它应该工作.
但是有人知道如何修补那个特定的位吗?
对不起,我真的不知道怎么说这个问题所以看起来很模糊.
我想要做的基本上是我有一个代码,用于读取用户的输入并将其与某些字母进行比较,但此过程应该是不区分大小写的.所以我使用.lower()字符串方法.
if (letter.lower() == "a" or letter.lower() == "b" or letter.lower() == "c"):
Run Code Online (Sandbox Code Playgroud)
(在这种情况下,应接受值"A","B","C","a","b"和"c",并且拒绝分配给名称"letter"的所有其他值.)
这可以进一步缩短吗?可读性并不重要,除非它是人类舌头无法理解的真正的gobbledygook哈哈.
我试过了:
if (letter.lower() == "a" or "b" or "c"):
Run Code Online (Sandbox Code Playgroud)
这不起作用.也不是:
if (letter.lower() == ("a" or "b" or "c")):
Run Code Online (Sandbox Code Playgroud)
我很感激任何意见.提前致谢 :)
我有一段代码看起来像这样:
myfunction(a, b, c)
myfunction(d, e, f)
myfunction(g, h, i)
myfunction(j, k, l)
Run Code Online (Sandbox Code Playgroud)
自变量的数量不变,但是每次必须使用不同的值连续调用该函数。这些值不会自动生成,而是手动输入。是否有内联解决方案来执行此操作而不创建函数来调用此函数?就像是:
myfunction(a, b, c)(d, e f)(g, h, i)(j, k, l)
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。提前致谢!
python ×4
python-3.x ×4
dart ×3
dictionary ×2
flutter ×2
arraylist ×1
filter ×1
function ×1
google-maps ×1
if-statement ×1
iterator ×1
regex ×1
shortcut ×1