enum PtzButton: Int {
case play = 1
case up = 2
case stop = 3
case left = 4
case none = 5
case right = 6
case zoomIn = 7
case down = 8
case zoomOut = 9
internal static let ptzActionMap: [PtzButton: PtzAction] = [
.up: .up,
.down: .down,
.left: .left,
.right: .right,
.zoomIn: .zoomIn,
.zoomOut: .zoomOut
]
var ptzAction: PtzAction? {
return PtzButton.ptzActionMap[self]
}
}
Run Code Online (Sandbox Code Playgroud)
这PtzAction是一个模型枚举。这PtzButton是一个视图绑定枚举。它们非常相似,但PtzButton不仅仅是案例。它必须知道,它们有不同的 rawValue 定义,我不应该改变它们。
所以,我的问题是:有没有更好的方法来简化ptzActionMap …
我有一个排序,List<int>好像{ 1, 2, 3, 4, 6, 7, 9 }
我想把它分成一些组 - 每个组都有这样的连续数字:{ {1, 2, 3, 4}, {6, 7}, {9} }
我知道我可以使用for循环来遍历列表,并在当前值和先前值之间进行比较,然后决定是追加到最后一个组还是创建一个新组.但我想找到一种"漂亮"的方式来做到这一点.也许使用LINQ?
编辑:
我从项目more-itertools中找到了一个python代码:
def consecutive_groups(iterable, ordering=lambda x: x):
for k, g in groupby(
enumerate(iterable), key=lambda x: x[0] - ordering(x[1])
):
yield map(itemgetter(1), g)
Run Code Online (Sandbox Code Playgroud) 我有一个调用其他工具的验证方法:
public ValidationResult Validate(Some arg) {
var errors = new List<ValidationError>();
validate1(arg, errors);
if (errors.Count > 0) {
return ValidationResult.Failed(errors);
}
validate2(arg, other, errors);
if (errors.Count > 0) {
return ValidationResult.Failed(errors);
}
validate3(arg, other2, errors);
if (errors.Count > 0) {
return ValidationResult.Failed(errors);
}
return ValidationResult.Succeess();
}
Run Code Online (Sandbox Code Playgroud)
我想要一些方法来制作如下代码,使用for循环来调用每个验证器:
public ValidationResult Validate(Some arg) {
var errors = new List<ValidationError>();
var validators = new [] {
validate1(arg, errors),
validate2(arg, other, errors),
validate3(arg, other2, errors)
};
foreach (var validator in validators) {
validator.invoke();
if …Run Code Online (Sandbox Code Playgroud)