【问题标题】:What is the best way to implement the function(String) -> Set<String>?实现函数(String)-> Set<String> 的最佳方法是什么?
【发布时间】:2022-08-16 22:31:46
【问题描述】:

您必须实现满足以下要求的功能:

  • 返回:包含指定字符串的 10 个产品名称。 如果有多个同名产品,则生产者名称以\" - \"的格式添加到产品名称中, 否则只返回 \"\"。 */

func listProductsByName(searchString: String) -&gt; Set&lt;String&gt;

您不能使用错误处理,所以我想用默认数据填充 Set,但这个解决方案不起作用。实现此功能的最佳方法是什么?

func listProductsByName(searchString: String) -> Set<String> {
    
    var searchProducts = Set<String>()
    
    for product in products {
        if product.name.contains(searchString) {
            if !searchProducts.contains(product.name){
                searchProducts.insert(product.name)}
            else { searchProducts.insert(product.name + \" - \" + product.producer)}
            }
        if searchProducts.count == 10 {
            break
        }
    }
    
    if searchProducts.count < 10 {
        var emptyElement = 0
        print(\"Найдено меньше 10 товаров: \\(searchProducts)\")
        repeat {
            searchProducts.insert(\"Пустой элемент № \\(emptyElement)\")
            emptyElement += 1
        } while searchProducts.count < 10
    }

    return searchProducts
}

    标签: ios swift set


    【解决方案1】:

    要从字面上解决挑战,请执行以下步骤。

    • filter 名称包含搜索字符串的产品,并通过prefix(10) 获取前 10 个项目

    • 按产品名称将数组分组到字典[String:[Product]]。这是识别同名产品的最有效方法。

    • 现在插入名称。如果产品名称是唯一的,请插入名称。如果不通过添加生产者来映射名称。

      func listProductsByName(searchString: String) -> Set<String> {
      
           var searchProducts = Set<String>()
           let filteredProducts = products
              .filter{$0.name.localizedStandardContains(searchString)}
              .prefix(10)
      
           let groupedFilteredProducts = Dictionary(grouping: filteredProducts, by: \.name)
           for (name, products) in groupedFilteredProducts {
               if products.count == 1 {
                   searchProducts.insert(name)
               } else {
                   searchProducts.union(Set(products.map{$0.name + " - " + $0.producer}))
               }
           }
           return searchProducts
       }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多