javascript - 语言独立 : split a line with multiple repeating properties into multiple lines with each property only once

标签 javascript algorithm vb6

我有如下几行:

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/

相关文章:

javascript - Node 和 React 不同步

c - 查找出现在数组一半以上元素中的常量

algorithm - 广度优先搜索 : Knight cover

vb.net - 开发一个不会失去焦点的应用程序?

VB6 IsNumeric 会出错吗?

windows - VB 6应用程序如何确定它是否在Windows 10上运行?

javascript - 旧 IE 的 Map.set() polyfill?

javascript - 使用 JS 和 SVG 动态添加和删除类时遇到问题

javascript - 如何控制tinyMCE模态的宽度和高度?

c++ - 优化的 argmin : an effective way to find an item minimizing a function