【问题标题】:Create unique name from Array without duplicates从 Array 创建唯一名称,不重复
【发布时间】:2017-02-26 17:15:37
【问题描述】:

我想尝试从数组中创建唯一名称。

public String[] firstname = {"Ben", "Pe", "To", "Jau",...};

在这里我创建了一个字符串(Helper.random 只是一种选择随机元素的方法)。我想避免使用像“Benben”或“Pepe”这样的名字......

String name1 = firstname[Helper.random(0, firstname.length)];
String name2 = firstname[Helper.random(0, firstname.length)];

if(name1.equals(name2)) {
    name1 = firstname[Helper.random(0, firstname.length)];
}

现在我被困住了。我创建了一些名称,但随后我得到了重复的名称,例如这里的“Benpe”和那里的“Benpe”。

如何创建唯一名称,例如:

从这个数组中以所有组合创建一个字符串名称(“Bento”、Benpe”、“Bento”.....)
如果你得到一个重复的(“Bento”,Bento”)添加另一个元素到名称(“Bentope”)

【问题讨论】:

  • 创建名称后如何处理这些名称?您是立即使用它们还是以某种方式存储它们?
  • 您能否迭代您的列表以检查是否存在重复值?

标签: java arrays string duplicates unique


【解决方案1】:

一种快速的解决方案是将if 更改为循环。你需要不断尝试,以防你连续多次获得相同的名字。

while (name1.equals(name2)) {
    name1 = firstname[Helper.random(0, firstname.length)];
}

请注意,ifwhile 的想法都不符合规范。您应该在名称中添加第三项,而不是替换 name1

【讨论】:

    【解决方案2】:

    我将添加一个检查当前生成名称的哈希的子句。如果它存在,那么我们知道我们需要在现有字符串中添加另一个名称。再次检查...清洗、冲洗、重复。

    例如: `

                String[] names = {"Mike", "Bill", "Jerry", "Frank", "Poul", "Terry"};
                HashMap<String, Integer> nameMap = new HashMap<String, Integer>();
                Random rand = new Random();
    
                for (int i=0; i<10; i++) {
                        String myFirstName = names[rand.nextInt(names.length)];
                        String mySecondName = names[rand.nextInt(names.length)];
    
                        String concatName = myFirstName + " " + mySecondName;
                        if ( ! nameMap.containsKey(concatName) ) {
                                nameMap.put(concatName, 1);
                        } else {
                                // try adding a third name
                                String myThirdName = names[rand.nextInt(names.length)];
                                String newName = concatName + " " + myThirdName;
    
                                if ( ! nameMap.containsKey(newName) ) {
                                        nameMap.put(newName, 1);
                                } else {
                                        System.out.println(newName  + " already exists in the name map");
                                }
                        }
                }
    

    `

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多