使用可配置逻辑将字符串数组映射到另一个字符串数组
Map array of strings to another array of strings using configurable logic
如果我有一个字符串数组,我想创建一个“通用”转换器,将数组作为输入,连同一个“映射配置”,并根据映射配置生成另一个字符串数组,我该怎么做?
例如,
input: ["hello", "world", "to", "all", "junk"]
mapper config:
- Concatenate hello + world (i.e. combine position 0 and 1)
- Concatenate to + all (i.e. combine position 2 and 3)
- Drop junk (i.e. delete position 4)
Output: ["hello world", "to all"]
您可以试试这样的方法:
string[] Transform(string[] inputs, Transformation[] transformations)
每个转换都可以有源、操作和目标。对于您的示例,转换数据可能如下所示:
[
{
Source: 0,
Operation: “SetDestination”,
Destination: 0
},
{
Source: 1,
Operation: “ConcatenateDestinationSpaceSource”,
Destination: 0
},
{
Source: 2,
Operation: “SetDestination”,
Destination: 1
},
{
Source: 3,
Operation: “ConcatenateDestinationSpaceSource”,
Destination: 1
}
]
该方法的伪代码如下所示:
foreach(transformation in transformations)
{
switch(transformation.Operation)
{
case SetDestination:
output[transformation.Destination] = input[transformation.Source];
break;
case ConcatenateDestinationSpaceSource:
output[transformation.Destination] = output[transformation.Destination] + “ “ + input[transformation.Source];
break;
}
}
“垃圾”不需要任何操作,因为它永远不会放在输出中。
根据任何其他操作和您选择的数据结构,输出可能需要随时调整大小。这还假设映射配置预计将按给定顺序应用。
如果我有一个字符串数组,我想创建一个“通用”转换器,将数组作为输入,连同一个“映射配置”,并根据映射配置生成另一个字符串数组,我该怎么做?
例如,
input: ["hello", "world", "to", "all", "junk"]
mapper config:
- Concatenate hello + world (i.e. combine position 0 and 1)
- Concatenate to + all (i.e. combine position 2 and 3)
- Drop junk (i.e. delete position 4)
Output: ["hello world", "to all"]
您可以试试这样的方法:
string[] Transform(string[] inputs, Transformation[] transformations)
每个转换都可以有源、操作和目标。对于您的示例,转换数据可能如下所示:
[
{
Source: 0,
Operation: “SetDestination”,
Destination: 0
},
{
Source: 1,
Operation: “ConcatenateDestinationSpaceSource”,
Destination: 0
},
{
Source: 2,
Operation: “SetDestination”,
Destination: 1
},
{
Source: 3,
Operation: “ConcatenateDestinationSpaceSource”,
Destination: 1
}
]
该方法的伪代码如下所示:
foreach(transformation in transformations)
{
switch(transformation.Operation)
{
case SetDestination:
output[transformation.Destination] = input[transformation.Source];
break;
case ConcatenateDestinationSpaceSource:
output[transformation.Destination] = output[transformation.Destination] + “ “ + input[transformation.Source];
break;
}
}
“垃圾”不需要任何操作,因为它永远不会放在输出中。
根据任何其他操作和您选择的数据结构,输出可能需要随时调整大小。这还假设映射配置预计将按给定顺序应用。