根据另一个数组选择字符串数组值

时间:2018-11-16 14:21:12

标签: julia

我可以选择等于的值的数据

data = rand(1:3, 10)
value = 2
data .== value

或等于

的值列表
values = [1, 2]
in.(data, (values,))

最后一个是通用的,也可用于标量:in.(data, (value, ))

但是,此方法适用于Int,但泛型不适用于String值:

data = rand(["A", "B", "C"], 10)
value = "B"
data .== value
values = ["A","B"]
in.(data, (values, ))
in.(data, (value, ))
ERROR: use occursin(x, y) for string containment

String的通用方法吗?

对于通用的val输入,我正在编写以下内容,但我认为必须有更好的解决方案。

isa(val, AbstractArray) ? in.(data, (val,)) : data .== val

背景:我正在创建一个函数来从数据框中选择行(并对它们进行某些操作),但我希望既允许值列表,也可以允许单个值。

1 个答案:

答案 0 :(得分:2)

这是一个值得了解的技巧:

[x;]

现在-如果x是一个数组,它将保留为数组。如果x是标量,它将成为1元素数组。这正是您所需要的。

所以你可以写

in.(data, ([val;],))

缺点是它分配了一个新数组,但是我猜想val很小,并且它不在性能关键的代码中使用吗?如果代码对性能至关重要,我认为最好通过单独的分支处理标量和数组。