【问题标题】:How can I create every unique combination possible for the contents of two arrays?如何为两个数组的内容创建每个可能的唯一组合?
【发布时间】:2021-03-16 03:27:35
【问题描述】:

我有一个类似于 someone elses 的问题 - 但是,它略有不同,我需要一些帮助。

我有两个数组:

var array1=["A","B","C"];
var array2=["1","2"];

请注意,它们可以有不同的尺寸。如何生成另一个数组来包含上述组合数组的每个 UNIQUE 集合,以便每个数组的元素不会重复如下集合?

var combos=[
   ["A1","B2"],
   ["A1","C2"],
   ["B1","C2"],
   ["A2","B1"],
   ["A2","C1"],
   ["B2","C1"]
]

注意:["C1","A2"](和类似的)是重复的,不会包含在集合中。

此外 -> 如果array2=["1","2","3"]

然后

var combos=[
   [A1, B2, C3],
   [A1, B3, C2],
   [A2, B1, C3],
   [A2, B3, C1],
   [A3, B1, C2],
   [A3, B2, C1]
]

我相信这是一种排列形式,但我需要帮助来了解如何在 node.js 中实现集合合并。提前致谢!

【问题讨论】:

    标签: node.js arrays multidimensional-array set permutation


    【解决方案1】:

    我在 Rust 中做了一些可以做到这一点的东西,但是它只有一个数字列表。 [[0, 0], [0, 1], [1, 0], [1, 1]] 而且速度非常慢,但希望对您有所帮助!

    fn add_unique(combos: &mut Vec<Vec<u8>>, val: &mut [u8]) -> bool {
        if !combos.contains(&val.iter().cloned().collect()) {
            println!("Size: {:>5} || Adding: {:?}", combos.len(), val);
            combos.push(Vec::from(val));
            true
        } else {
            false
        }
    }
    
    fn main() {
        let mut all_combos: Vec<Vec<u8>> = Vec::new();
        let max_check: usize = 5;
    
        for _ in 0..max_check.pow(2) {
            let mut push = [0u8; 2];
            let mut unique_added = false;
    
            for val in 0..push.len() {
                for i in 0..max_check {
                    push[val] = i as u8;
    
                    for other in 0..push.len() {
                        if other == val {
                            continue;
                        }
    
                        for i in 0..max_check {
                            push[other] = i as u8;
    
                            unique_added = add_unique(&mut all_combos, &mut push);
    
                            if unique_added {
                                push = [0u8; 2];
                                break;
                            }
                        }
    
                        if unique_added {
                            break;
                        }
                    }
    
                    if unique_added {
                        break;
                    }
                }
            }
        }
    
        println!("{:?}", all_combos);
    }
    

    【讨论】:

    • 嘿,露娜!我实际上是自己想出来的,并相应地对其进行了编码。感谢您的回复!
    猜你喜欢
    • 2012-02-14
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多