我有如下几行:
prop1 value1#prop2 value2#prop3 value3#prop4 value4#prop3 value5#prop5 value6#prop5 value7#prop5 value8#prop2 value9
这意味着每个属性可以在同一行中多次出现,在不同的位置具有不同的值。我正在寻找一种快速有效的方法将该行拆分为相应数量的行(在本例中为 12: 2x2x3,其中具有每个值的每个属性仅存在一次:
prop1 value1#prop2 value2#prop3 value3#prop4 value4#prop5 value6
prop1 value1#prop2 value2#prop3 value3#prop4 value4#prop5 value7
prop1 value1#prop2 value2#prop3 value3#prop4 value4#prop5 value8
prop1 value1#prop2 value2#prop3 value5#prop4 value4#prop5 value6
prop1 value1#prop2 value2#prop3 value5#prop4 value4#prop5 value7
prop1 value1#prop2 value2#prop3 value5#prop4 value4#prop5 value8
prop1 value1#prop2 value9#prop3 value3#prop4 value4#prop5 value6
prop1 value1#prop2 value9#prop3 value3#prop4 value4#prop5 value7
prop1 value1#prop2 value9#prop3 value3#prop4 value4#prop5 value8
prop1 value1#prop2 value9#prop3 value5#prop4 value4#prop5 value6
prop1 value1#prop2 value9#prop3 value5#prop4 value4#prop5 value7
prop1 value1#prop2 value9#prop3 value5#prop4 value4#prop5 value8
可以有任意数量的属性,可以是每行中任意顺序的任意时间(>=1)。
这确实是独立于语言的,但解析器的当前实现是在 vb6 中。
提前谢谢你。
最佳答案
下面是一些生成所需输出的 Java 代码。希望你能将它翻译成 VB6。
public static void main(String[] args)
{
String input = "prop1 value1#prop2 value2#prop3 value3#prop4 value4#prop3 value5#prop5 value6#prop5 value7#prop5 value8#prop2 value9";
String[] pairs = input.split("#");
// build a map of properties to values
Map<String, List<String>> propValues = new TreeMap<>();
for(String pair : pairs)
{
String[] p = pair.split(" ");
String prop = p[0];
String value = p[1];
List<String> values = propValues.get(prop);
if(values == null) propValues.put(prop, values = new ArrayList<String>());
values.add(value);
}
// create and fill an array with the number of values for each property
int[] sizes = new int[propValues.size()];
int i=0;
for(String prop : propValues.keySet())
{
sizes[i++] = propValues.get(prop).size();
}
// create an array to hold the index of each value we're going to select
// all array elements initialized to 0
int[] idx = new int[sizes.length];
// generate output
while(true)
{
// print the output line, selecting the indexed value for each property
int j=0;
for(String prop : propValues.keySet())
{
String value = propValues.get(prop).get(idx[j++]);
System.out.print(prop + " " + value);
if(j < idx.length) System.out.print("#");
}
System.out.println();
// generate the next permutation of indexes
int k=idx.length-1;
for(; k>=0; k--)
{
idx[k]++;
if(idx[k] < sizes[k]) break;
idx[k] = 0;
// This prints a blank line whenever the last property wraps around
// Your example output has this, I'm not sure if it's significant
if(k==idx.length-1) System.out.println();
}
// if the first index wrapped around then we're done
if(k < 0) break;
}
}
输出:
prop1 value1#prop2 value2#prop3 value3#prop4 value4#prop5 value6
prop1 value1#prop2 value2#prop3 value3#prop4 value4#prop5 value7
prop1 value1#prop2 value2#prop3 value3#prop4 value4#prop5 value8
prop1 value1#prop2 value2#prop3 value5#prop4 value4#prop5 value6
prop1 value1#prop2 value2#prop3 value5#prop4 value4#prop5 value7
prop1 value1#prop2 value2#prop3 value5#prop4 value4#prop5 value8
prop1 value1#prop2 value9#prop3 value3#prop4 value4#prop5 value6
prop1 value1#prop2 value9#prop3 value3#prop4 value4#prop5 value7
prop1 value1#prop2 value9#prop3 value3#prop4 value4#prop5 value8
prop1 value1#prop2 value9#prop3 value5#prop4 value4#prop5 value6
prop1 value1#prop2 value9#prop3 value5#prop4 value4#prop5 value7
prop1 value1#prop2 value9#prop3 value5#prop4 value4#prop5 value8
关于javascript - 语言独立 : split a line with multiple repeating properties into multiple lines with each property only once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45257077/