【问题标题】:How to make a searcher with uncertain number of inputs?如何使输入数量不确定的搜索器?
【发布时间】:2021-06-05 20:27:39
【问题描述】:

我有一个创建和存储书籍的结构,如下所示。

type Book struct {
    Authors [] string
    ISBN string
    Countries [] string
    Category string
}

type Books []Book

然后我定义如下值。

test123 := Books{}

test123 = append(test123, Book{
        Authors: []string{"Alice", "John", "Bob"},
        Countries: []string{"CA", "US", "DE"},
        ISBN: "1234567",
        Category: "sci-fi",
    })


test123 = append(test123, Book{
        Countries: []string{"UK"},
        Category: "comic book",
        ISBN: "0001298",
    })

test123 = append(test123, Book{
        Authors: []string{"Alice", "Bob"},
        Countries: []string{"UK"},
        Category: "comic book",
        ISBN: "0001298",
    })

test123 = append(test123, Book{
            ISBN: []string{"FR", "AU"},
            Category: "sci-fi",
        })

并非每个 Book 结构都包含所有已定义的元素。因此,某些 Book 结构元素可能没有 ISBN 和/或 Country 值。

如何在这样的结构中进行搜索?例如,我将 DE 作为 Country 值,然后将 Alice 作为 Author 值。当给定 Alice 和 DE 的值时,如何编写可以查找和检索相关元素的代码?

更新

@Cerise Limón 和@gonutz 我没有准确地问过这个问题,对不起。此代码仅适用于 DE 和 Alice 值,不适用于其他值。对于其他组合,我必须编写由 if 和 else 组成的代码块。事实上,无论我将给出什么值,我都想创建在任何切片结构中搜索时都能找到值的算法。有可能吗?

示例场景 - 1: 我对爱丽丝国家的作者有 DE 值。我想在 Books 结构中找到包含这些值的“切片”。

示例场景 - 2: 我有 ISBN 的 123456,国家/地区的 FR,作者的 Bob。我想在 Books 结构中找到包含这些值的“切片”。

换句话说,我将作为输入提供的值的类型和数量可以不同。

【问题讨论】:

  • 我没有准确地问过这个问题,对不起。我更新了问题。
  • 不清楚你在问什么。如果您编辑问题以显示输入和预期输出,将会很有帮助。

标签: go search struct slice


【解决方案1】:

只需编写您想要搜索的内容,只需 iffor like this

for _, b := range books {
    hasDE := false
    for _, c := range b.Countries {
        if c == "DE" {
            hasDE = true
        }
    }

    isAlice := false
    for _, a := range b.Authors {
        if a == "Alice" {
            isAlice = true
        }
    }

    if hasDE && isAlice {
        fmt.Println(b)
    }
}

【讨论】:

  • 我没有准确地问过这个问题,对不起。我更新了问题。
  • 当然,您必须添加一些变量而不是硬编码您的搜索词,并且您必须添加更多代码来处理其他情况和组合。但精神和上面是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多