当前位置: 首页 > 知识库问答 >
问题:

在java中不重复地从多维数组中随机选取元素[闭合]

舒赞
2023-03-14

想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。

string bag1[][] = { {"Bayern Munich","Germany"},{"Sevilla","Spaın"},{"Real Madrid","Spaın"},{"Liverpool","England"},{"Juventus","Italy"},{"Paris Saint","France"},{"Zenit","Rusia"},{"Porto","Rusia"}};
string bag2[][] = { {"Barselona","Spaın"},{"Atletico Madrid","Spaın"},{"Manchester City","England"},{"Manchester United","England"},{"Borussia Dortmund","Germany"},{"Shakhtar Donetsk","Ukrayna"},{"Chelsea","England"},{"Ajax","Hollanda"}};
string bag3[][] = { {"Dynamo Kiev","Ukrayna"},{"Redbull Salzburg","Germany"},{"RB Leibzig","Germany"},{"Internazionale","Italy"},{"Olympiacos","Italy"},{"Lazio","Italy"},{"Krasnodar","Rusia"},{"Atalanta","Italy"}};
string bag4[][] = { {"Lokomotiv M","Rusia"},{"Marseille","France"},{"Club Brugge","Belçika"},{"BorMönchengladbach","Germany"},{"Galatasaray","Türkiye"},{"Midtjylland","Danimarka"},{"Rennes","France"},{"Ferenevaros","Macaristan"}};

我有4个java数组。我想随机选择一个项目,每个项目不重复。我想在8个不同的组中添加4个项目。我不想把同一个国家分成两组。

共有1个答案

金正阳
2023-03-14

我有一个哈希映射的解决方案,因为它不那么乏味。它也可以应用于数组,但是您可能需要更多地使用索引。

思路是洗牌所有球队,然后选择第一支球队,在不复制国家/球队的条件下选择所有其他球队。

        Map<String, String> bagOne = Map.of("Bayern Munich", "Germany", "Sevilla", "Spaın", "Real Madrid", "Spaın", "Liverpool", "England", "Juventus", "Italy", "Paris Saint", "France", "Zenit", "Rusia", "Porto", "Rusia");
        Map<String, String> bagTwo = Map.of("Barselona", "Spaın", "Atletico Madrid", "Spaın", "Manchester City", "England", "Manchester United", "England", "Borussia Dortmund", "Germany", "Shakhtar Donetsk", "Ukrayna", "Chelsea", "England", "Ajax", "Hollanda");
        Map<String, String> bagThree = Map.of("Dynamo Kiev", "Ukrayna", "Redbull Salzburg", "Germany", "RB Leibzig", "Germany", "Internazionale", "Italy", "Olympiacos", "Italy", "Lazio", "Italy", "Krasnodar", "Rusia", "Atalanta", "Italy");
        Map<String, String> bagFour = Map.of("Lokomotiv M", "Rusia", "Marseille", "France", "Club Brugge", "Belçika", "BorMönchengladbach", "Germany", "Galatasaray", "Türkiye", "Midtjylland", "Danimarka", "Rennes", "France", "Ferenevaros", "Macaristan");

        List<Map<String, String>> remainingBags = new ArrayList<>();
        remainingBags.add(bagTwo);
        remainingBags.add(bagThree);
        remainingBags.add(bagFour);

        List<String> bagOneTeams = new ArrayList<String>(bagOne.keySet());
        Collections.shuffle(bagOneTeams);

        List<List<String>> remainingTeams = new ArrayList<>();
        remainingTeams.add(new ArrayList<>(bagTwo.keySet()));
        remainingTeams.add(new ArrayList<>(bagThree.keySet()));
        remainingTeams.add(new ArrayList<>(bagFour.keySet()));
        Collections.shuffle(remainingTeams.get(0));
        Collections.shuffle(remainingTeams.get(1));
        Collections.shuffle(remainingTeams.get(2));

        List<LinkedHashMap<String, String>> resultingTeams = new ArrayList<>();
        IntStream.range(0, 8).forEach(i-> {
            LinkedHashMap<String, String> team = new LinkedHashMap<>();
            team.put(bagOneTeams.get(i), bagOne.get(bagOneTeams.get(i)));

            IntStream.range(0, 3).forEach(j -> {
                String nextTeam = getNonDuplicateCountryTeam(remainingTeams.get(j), team.keySet(), remainingBags.get(j), team.values());
                team.put(nextTeam, remainingBags.get(j).get(nextTeam));
            });

            resultingTeams.add(team);
        });

方法getNonDuplicateCountryTeam的定义如下:

    public String getNonDuplicateCountryTeam(List<String> teams, Set<String> teamsTaken, Map<String, String> countryMap, Collection<String> countriesTaken) {
        for (String team : teams) {
            if (teamsTaken.contains(team) || countriesTaken.contains(countryMap.get(team))) continue;
            teams.remove(team);
            return team;
        }
        return "";
    }

将结果分为8个随机小组,每组4个,不重复的国家和小组:

[{Porto=Rusia, Manchester United=England, Internazionale=Italy, Rennes=France},
{Bayern Munich=Germany, Atletico Madrid=Spaın, Dynamo Kiev=Ukrayna, Lokomotiv M=Rusia},
{Sevilla=Spaın, Manchester City=England, Olympiacos=Italy, Marseille=France},
{Paris Saint=France, Borussia Dortmund=Germany, Atalanta=Italy, Club Brugge=Belçika},
{Liverpool=England, Ajax=Hollanda, Lazio=Italy, BorMönchengladbach=Germany},
{Zenit=Rusia, Shakhtar Donetsk=Ukrayna, RB Leibzig=Germany, Ferenevaros=Macaristan},
{Real Madrid=Spaın, Chelsea=England, Redbull Salzburg=Germany, Midtjylland=Danimarka},
{Juventus=Italy, Barselona=Spaın, Krasnodar=Rusia, Galatasaray=Türkiye}]
 类似资料:
  • 问题内容: 我有一个像这样的数组: 我想从该数组中获取3个随机元素。我来自C#,但是我不确定该从哪里开始。我想我应该先对数组进行随机排序,然后再从中选择前3个项目? 我尝试使用以下扩展名将其改组: 但随后在“ shuffle()”的位置说“’()’不可转换为’[Int]’”。 为了挑选一些元素,我使用: 到目前为止看起来还不错。 如何洗牌?还是有人对此有更好/更优雅的解决方案? 问题答案: Xco

  • 本文向大家介绍php从数组中随机选择若干不重复元素的方法,包括了php从数组中随机选择若干不重复元素的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php从数组中随机选择若干不重复元素的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助。

  • 问题内容: 假设我有一个数组,我想随机选择一个元素。 最简单的方法是什么? 明显的方法是。但是也许有红宝石之类的东西?或者如果不能通过扩展创建这种方法? 问题答案: Swift 4.2及更高版本 推荐的新方法是Collection协议的内置方法:。它返回一个可选参数以避免我以前假设的空情况。 如果不创建数组并且不能保证count> 0,则应执行以下操作: Swift 4.1及以下 只是为了回答您的

  • 假设我有一个数组,我想随机选择一个元素。 最简单的方法是什么? 最明显的方法是数组[随机索引]。但可能有类似ruby的数组。示例 ?或者,如果不是,那么可以使用扩展创建这样的方法吗?

  • 我目前正试图通过改变算法来优化一些MATLAB/Octave代码,但不知道如何处理一些随机性。假设我有一个整数向量V,每个元素代表一些东西的计数,在我的例子中是光子。现在,我想随机选取一些“东西”,创建一个大小相同的新向量,但要调整计数。 以下是我目前的做法: 这是上面描述的一个相当简单的实现。但是它有一个明显的性能缺陷:函数创建一个向量(idxV),每个光子包含一个元素。所以如果我的V只有100

  • 问题内容: 我正在寻找从整数数组中随机选择数字的解决方案。 例如我有一个数组,如何随机选择一个数字? 问题答案: