克隆数据结构的任何声明性方法

本文关键字:声明 方法 任何 数据结构 | 更新日期: 2023-09-27 18:33:40

我现在正在从事的项目需要一些声明性的方式来定义一堆实验的设置。

到目前为止,我已经找到了这样的解决方案。有一些数据结构使用 JSON 公开默认设置:

{
    "trustRatio": 0.7,
    "filter.coefA": 0,
    "filter.coefB": 1,
    "filter.coefC": 2,
    "filter.coefD": 3
}

然后要设置实验,我们必须指定将更改哪个字段运行实验时。现在我这样做:

{
    "path": "filter.coefA",
    "values": [0, 1, 2, 3, 4, 5]
}

{
    "path": "filter.coefA",
    "min": 0
    "max": 5,
    "step": 1
}

然后我将默认和"渐变"设置实例化为字典并使用"路径"键使用默认设置创建一堆实验设置作为样板,值作为实验里程碑。

这个解决方案可以很容易地使用我正在使用的Python或CSharp来实现但它不是最好的,因为我存储了默认值和"渐变"设置分开。另一件事是我不能使用分层结构如下:

{
    "trustRatio": 0.7,
    "filter":
    {
        "coefA": 0,
        "coefB": 1,
        "coefC": 2,
        "coefD": 3
    }
}

由于字典在实现此内容时施加的约束Python 和 CSharp 中的解决方案。

有谁知道是否有任何Python或CSharp(或至少其他CLR兼容语言,如FSharp(工具可以实现通过现场声明"梯度"来获取一系列实验设置,如下所示:

{
    "trustRatio": 0.7,
    "filter":
    {
        "coefA": [0, 1, 2, 3, 4, 5],
        "coefB": 1,
        "coefC": 2,
        "coefD": 3
    }
}

克隆数据结构的任何声明性方法

在 Python 中,有几个内置方法用于克隆字典结构:dict.copy(( 和 copy.deepcopy((Deepcopy可以处理任何深度的多维词典,AFAIK。所以你可以有:-

>>> gradient = {
...    "trustRatio": 0.7,
...    "filter":
...    {
...        "coefA": [0, 1, 2, 3, 4, 5],
...        "coefB": 1,
...        "coefC": 2,
...        "coefD": 3
...    }
... }
>>>
>>> gradient2 = gradient.copy()
>>> print gradient2
{'filter': {'coefD': 3, 'coefA': [0, 1, 2, 3, 4, 5], 'coefB': 1, 'coefC': 2}, 'trustRatio': 0.7}
>>> import copy
>>> print copy.deepcopy( gradient )
{'filter': {'coefD': 3, 'coefA': [0, 1, 2, 3, 4, 5], 'coefB': 1, 'coefC': 2}, 'trustRatio': 0.7}
>>> gradient.copy() == copy.deepcopy( gradient ) == gradient
True

在网络上进行了一些搜索后,我已经为这个问题实施了自己的解决方案。它完全符合我想做的。它的描述可以在这里找到。CSharp 源代码以及此处的一些示例。