【问题标题】:How do you adapt sequential search to return mutiple results?您如何调整顺序搜索以返回多个结果?
【发布时间】:2021-04-13 11:34:49
【问题描述】:

网站新手,如有错误请见谅。

编辑:将代码添加到 Pastebin。为了我从员工到客户的利益,代码被稍微模糊了。抱歉,如果搜索和替换未能找到雇员或雇员剩余的实例,我自己看不到。

我正在努力解决我认为是一个相对简单的问题。我正在尝试调整顺序搜索以返回匹配的名字。存在多个具有相同名字的实例,必须加以考虑。我有下面的模板可以使用,并且过去有几个示例可以正常工作,但是在调整它以适应多个结果时,我有一个大脑放屁。我什至不确定是返回一系列整数还是字符串。

static int SequentialSearch(int arr[], int searchKey){
    int n = arr.length;
    for (int i = 0; i < n; i++){
       if (arr[i] == searchKey)
       return i;
    }
    return -1;
}

如果在临时数组中返回相关索引时未找到某些内容,我是否仍然可以返回 -1,或者它是返回字符串并连接答案的更好方法。将返回 i;找到第一个实例后立即关闭循环还是完成 for 循环?

在过去的一个月里,我一直从表现良好转为苦苦挣扎,这个问题使我的所有问题变得更加复杂。无论如何,我都没有绑定到模板,所以如果存在一个不同的模板用于多次退货,我将非常感激。

更新:使用上面链接的代码,我得到了响应,但它们都是空的

编辑:响应@MrSmith42 的以下问题请求,预期输出将是返回具有匹配名字的任何员工的员工详细信息。 toString 已经完成,现在在此处开始链接,它适用于不同的输出(排序算法),所以我希望能够在方法正确后重复相同的步骤以轻松地获得正确的输出(可能是徒劳的希望)

【问题讨论】:

  • 请添加示例输入和预期输出。
  • 您可能使用了错误的方法,这可能有助于在过滤或映射方面进行思考。例如。 “过滤到匹配的实例”或“如果匹配或不匹配,则映射添加元数据的实例”。如果您只想过滤,则类似于Stream.of(arr).filter(str -&gt; str == searchKey)).collect(Collectors.toSet()).toArray(new String[0]);。不确定结果,我对 Java 有点生疏了。
  • @MrSmith42 我添加了一个经过轻微编辑的代码来覆盖我的曲目版本。预期的输入将是 '''SequentialSearch(customers, "name");''' 并且输出将是与名称匹配的客户记录。已经让它与排序方法一起工作,所以不要指望它会导致和问题,并且可以重复相同的步骤来获得我用于该方法的输出

标签: java algorithm search


【解决方案1】:

您可以返回带有结果的List&lt;Customer&gt;,如果没有结果,则返回null。或者只是返回列表并使用大小来确定是否有任何结果。

static List<Customer> SequentialSearch(Customer arr[], String firstName) {
    List<Customer> results = new ArrayList<>();
    for (Customer customer : arr) {
        if (customer.getFirstName().equalsIgnoreCase(firstName)) {
            results.add(customer);
        }
    }
    return results.size() > 0 ? results : null;
}

如果您有兴趣,您还可以使用这样的流返回一组客户。

Customer[] results = Arrays.stream(customers).filter(
        c -> c.getFirstName().equalsIgnoreCase(firstName))
            .toArray(Customer[]::new);
// or a list
List<Customer> results = Arrays.stream(customers).filter(
        c -> c.getFirstName().equalsIgnoreCase(firstName))
            .collect(Collectors.toList());

【讨论】:

  • 感谢您的快速回复。是的,它们是从文件导入的字符串值。文件导入盛大,一直在用其他方法。今天下课后我会试一试,告诉你进展如何,应该是大约 2 小时。没有使用 .add 方法,它比我创建和使用的临时数组平滑得多。
  • 我尝试使用我添加到原始帖子(pastebin 超链接)的代码来实现那里的代码,当它返回值时它们都是空的,所以我假设我的 if() 循环是原因那个。遇到错误,导致结果未初始化,所以我主要是这样做的,因此是空值。以为他们会被接走
  • @TJones10 如果您包含一些示例数据,包括要搜索的内容和预期的输出,这将有很大帮助。
  • 我不介意共享 csv 文件,但我看不到任何上传选项,并且不确定如何格式化。搜索将是任何名字作为 searchKey,预期输出将是带有字段(emp_no、birth_date、first_name、gender、join_date)的客户记录。我不认为输出将是一个问题,因为 toString 已经被写入并且正在其他地方使用相同的 toString 在同一文件上使用排序方法。我可能误解了你的要求。抱歉,希望尽快了解 Stack 规范。
  • 我编辑了答案。如果您只是对数组使用增强的 for 循环,则无需获取其大小。干净多了。
猜你喜欢
  • 2021-09-29
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
相关资源
最近更新 更多