标签: pattern-matching

如何模式匹配大型Scala案例类?

考虑以下Scala案例类:

case class WideLoad(a: String, b: Int, c: Float, d: ActorRef, e: Date)
Run Code Online (Sandbox Code Playgroud)

模式匹配允许我提取一个字段并丢弃其他字段,如下所示:

someVal match {
    case WideLoad(_, _, _, d, _) => d ! SomeMessage(...)
}
Run Code Online (Sandbox Code Playgroud)

我想做什么,以及当一个案例类有大约20个奇数字段时更有意义的是,以一种不涉及输入的方式提取几个值WideLoad(_, _, _, _, _, some, _, _, _, thing, _, _, interesting).

我希望命名args可以在这里提供帮助,尽管以下语法不起作用:

someVal match {
    case WideLoad(d = dActor) => dActor ! SomeMessage(...)
    //              ^---------- does not compile
}
Run Code Online (Sandbox Code Playgroud)

这里有什么希望,还是我不知道输入很多很多_, _, _, _

编辑:我明白我能做到case wl @ WideLoad(...whatever...) => wl.d,但我仍然想知道是否有更复杂的语法能够满足我的需求,而无需引入额外的内容val.

scala pattern-matching

40
推荐指数
2
解决办法
9731
查看次数

Haskell模式匹配 - 它是什么?

Haskell中的模式匹配是什么?它与保护方程有什么关系?

我试过寻找一个简单的解释,但我还没找到.

编辑:有人标记为家庭作业.我不再去上学了,我只是在学习Haskell,而我正在努力理解这个概念.纯粹出于兴趣.

haskell functional-programming pattern-matching

39
推荐指数
3
解决办法
2万
查看次数

39
推荐指数
2
解决办法
3290
查看次数

Python中列表的模式匹配

我想在Python中的列表上进行一些模式匹配.例如,在Haskell中,我可以执行以下操作:

fun (head : rest) = ...
Run Code Online (Sandbox Code Playgroud)

因此,当我传入一个列表时,head将是第一个元素,rest并将成为尾随元素.

同样,在Python中,我可以自动解压缩元组:

(var1, var2) = func_that_returns_a_tuple()
Run Code Online (Sandbox Code Playgroud)

我想用Python中的列表做类似的事情.现在,我有一个返回列表的函数,以及执行以下操作的一大块代码:

ls = my_func()
(head, rest) = (ls[0], ls[1:])
Run Code Online (Sandbox Code Playgroud)

我想知道我是否能以某种方式在Python中用一行来代替,而不是两行.

python functional-programming pattern-matching

38
推荐指数
2
解决办法
3万
查看次数

如何在Scala中的范围上进行模式匹配?

在Ruby中我可以这样写:

case n
when 0...5  then "less than five"
when 5...10 then "less than ten"
else "a lot"
end
Run Code Online (Sandbox Code Playgroud)

我如何在Scala中执行此操作?

编辑:我最好比使用它更优雅if.

scala range pattern-matching

38
推荐指数
3
解决办法
1万
查看次数

找到高质量和低质量,像素化图像之间的匹配 - 是否可能?怎么样?

我有个问题.我的公司给了我一项非常无聊的任务.我们有两个对话框数据库.其中一个数据库包含可怕质量的图像,另一个非常高质量.

不幸的是,可怕质量的对话包含了对其他信息的重要映射.

我的任务是,手动,浏览所有不良图像并将它们匹配到好的图像.

是否有可能在任何程度上自动化这个过程?以下是两个对话框(从Google图像中随机抽取)的示例:

质量好的形象

质量差的图像

所以我目前正在尝试用C#编写一个程序来从数据库中提取这些照片,循环浏览它们,找到具有常见形状的照片,并返回它们的ID.我最好的选择是什么?

c# algorithm image image-processing pattern-matching

38
推荐指数
5
解决办法
3599
查看次数

使用通配符进行模式匹配

如何使用通配符识别字符串?

我发现了glob2rx,但我不太明白如何使用它.我尝试使用以下代码来选择以单词开头的数据框行blue:

# make data frame
a <- data.frame( x =  c('red','blue1','blue2', 'red2'))

# 1
result <- subset(a, x == glob2rx("blue*") )

# 2
test = ls(pattern = glob2rx("blue*"))
result2 <- subset(a, x == test )

# 3
result3 <- subset(a, x == pattern("blue*") )
Run Code Online (Sandbox Code Playgroud)

但是,这些都没有奏效.我不确定我是否应该使用不同的功能来尝试这样做.

r wildcard pattern-matching

37
推荐指数
2
解决办法
9万
查看次数

unapply和unapplySeq有什么区别?

为什么Scala有unapplyunapplySeq?两者有什么区别?我什么时候应该更喜欢一个?

scala pattern-matching unapply

37
推荐指数
2
解决办法
7426
查看次数

在Scala匿名函数中是否有更简洁的模式匹配方法?

我发现自己编写如下代码:

val b = a map (entry =>
    entry match {
        case ((x,y), u) => ((y,x), u)
    }
)
Run Code Online (Sandbox Code Playgroud)

我想以不同的方式写它,如果只有这个工作:

val c = a map (((x,y) -> u) =>
    (y,x) -> u
)
Run Code Online (Sandbox Code Playgroud)

有什么方法可以让我接近这个吗?

scala pattern-matching

36
推荐指数
3
解决办法
2万
查看次数

Scala - 大小写匹配部分字符串

我有以下内容:

serv match {

    case "chat" => Chat_Server ! Relay_Message(serv)
    case _ => null

}
Run Code Online (Sandbox Code Playgroud)

问题是有时我还会在serv字符串的末尾传递一个额外的参数,所以:

var serv = "chat.message"
Run Code Online (Sandbox Code Playgroud)

有没有办法可以匹配字符串的一部分,所以它仍然被发送到Chat_Server?

谢谢你的帮助,非常感谢:)

string scala pattern-matching

35
推荐指数
2
解决办法
3万
查看次数