level 3
贴吧用户_7AKEZaK
楼主
我有一个Association, 类似这样 <|a -> 1, b -> 2, c -> 3, d -> 4|>, 我想挑出其中所有值为偶数的rule, 即想要得到的结果是<|b -> 2, d -> 4|>。
我试了下,Cases似乎不对Association内部不起作用,无论是
Cases[<|a -> 1, b -> 2, c -> 3, d -> 4|>, KeyValuePattern[ k_ -> v_?EvenQ] -> {k -> v}]
Cases[<|a -> 1, b -> 2, c -> 3, d -> 4|>, ( k_ -> v_?EvenQ) -> (k -> v)]
都不行。
但是用Normal将Association的类型转换成rule的List后倒是可以给出想要的结果
Cases[{a -> 1, b -> 2, c -> 3, d -> 4}, ( k_ -> v_?EvenQ) -> {k -> v}]
另外看帮助,试了下里面说的ReplaceAll+KeyValuePattern, 但没太搞明白, 貌似ReplaceAll+KeyValuePattern只会挑出第一个满足条件的rule ,不知道为什么。
所以就想问一下,Association这种数据结构,能直接实现类似Cases[{a -> 1, b -> 2, c -> 3, d -> 4}, ( k_ -> v_?EvenQ) -> {k -> v}]的功能吗? 还是说只能转换成List后才能做这些基本的操作?
2022年01月06日 05点01分
1
我试了下,Cases似乎不对Association内部不起作用,无论是
Cases[<|a -> 1, b -> 2, c -> 3, d -> 4|>, KeyValuePattern[ k_ -> v_?EvenQ] -> {k -> v}]
Cases[<|a -> 1, b -> 2, c -> 3, d -> 4|>, ( k_ -> v_?EvenQ) -> (k -> v)]
都不行。
但是用Normal将Association的类型转换成rule的List后倒是可以给出想要的结果
Cases[{a -> 1, b -> 2, c -> 3, d -> 4}, ( k_ -> v_?EvenQ) -> {k -> v}]
另外看帮助,试了下里面说的ReplaceAll+KeyValuePattern, 但没太搞明白, 貌似ReplaceAll+KeyValuePattern只会挑出第一个满足条件的rule ,不知道为什么。
所以就想问一下,Association这种数据结构,能直接实现类似Cases[{a -> 1, b -> 2, c -> 3, d -> 4}, ( k_ -> v_?EvenQ) -> {k -> v}]的功能吗? 还是说只能转换成List后才能做这些基本的操作?