美文网首页
数组元素组合 Array Combination

数组元素组合 Array Combination

作者: googoler | 来源:发表于2020-05-29 17:42 被阅读0次

有数组为:
{"111111", "222222", "333333"}
{"444444", "555555"}
{"666666", "777777"}

取每个数组中元素与之组合效果为:


image.png
void ArrayCombination(std::vector<std::set<string>> &src, std::vector<std::set<string>> &dest)
{
    if (src.empty()) return;

    auto addCombination = [](std::vector<std::set<string>> &v1, std::set<string> &v2)->std::vector<std::set<string>> {
        std::vector<string> _v2;
        for (auto &var : v2) {
            _v2.push_back(var);
        }

        std::vector<std::set<string>> _array;
        size_t _count = v1.size() * _v2.size();
        for (size_t i = 0, a1 = 0, a2 = 0; i < _count; ++i) {
            std::set<string> _set;
            if (a1 < v1.size())  _set = v1[a1];
            if (a2 < _v2.size()) _set.insert(_v2[a2]);

            if (!_set.empty())
                _array.push_back(_set);

            a2++;
            if (a2 == _v2.size()) {
                a2 = 0;
                ++a1;
            }
        }

        return std::move(_array);
    };


    for (auto &var : src[0])
        dest.push_back(std::set<string>{ var });

    size_t srcSize = src.size();
    if (srcSize > 1) {
        for (size_t i = 1; i < srcSize; ++i)
            dest = addCombination(dest, src[i]);
    }
}

int main()
{
    std::vector<std::set<string>> src, dest;

    src.push_back(std::set<string>{"111111", "222222", "333333"});
    src.push_back(std::set<string>{"444444", "555555"});
    src.push_back(std::set<string>{"666666", "777777"});

    ArrayCombination(src, dest);

    for (auto &var : dest) {
        for (auto &item : var)
            std::cout << item.c_str() << " ";
        std::cout << std::endl;
    }

    system("pause");
    return 0;
}

参考:
java之数组交叉遍历组合
原版本中有一问题:

image.png
修复后如下:
public class Main {

    public static void main(String[] args) {
    // write your code here
        String [] a={"a","b","c"};
        String [] b={"d","e"};
        String [] c={"f","j"};
        String [] d={"h","i"};
        String[] add = new Main().turns(b,a, c,d);
        for (String string : add) {
            System.out.println(string);
        }
    }

    /**
     * 遍历组合
     * @param arrays
     * @return
     */
    public static String[] turns(String[] ...arrays){
        if(arrays.length==1){
            return arrays[0];
        }
        if(arrays.length==0){
            return null;
        }
        
        String[] target = null;

        //两两遍历
        for (int i = 0; i < arrays.length; i++) {
            if(i==0){
                target=doubleTurns(arrays[0],arrays[1]);
                i++;
            }else{
                target=doubleTurns(target,arrays[i]);
            }
        }
        return target;
    }

    /**
     * 两两遍历
     * @param array1
     * @param array2
     * @return
     */
    public static String[] doubleTurns(String [] array1,String[] array2){
        String [] target=new String[array1.length*array2.length];
        for (int i = 0,a1=0,a2=0; i <array1.length*array2.length; i++) {
            target[i]=array1[a1]+","+array2[a2];
            a2++;
            if(a2==array2.length){
                a2=0;
                a1++;
            }
        }
        return target;
    }
}

相关文章

网友评论

      本文标题:数组元素组合 Array Combination

      本文链接:https://www.haomeiwen.com/subject/ofjfzhtx.html