gpt4 book ai didi

functional-programming - 在 map 内部使用 if 时如何处理 "if may be missing an else clause"?

转载 作者:行者123 更新时间:2023-11-29 08:16:53 26 4
gpt4 key购买 nike

我正在研究一个代码挑战,该挑战将从单词列表中检测给定单词的不区分大小写的字谜。

我的第一个剪辑是使用这样的东西:

pub fn anagrams_for(s: &'static str, v: &[&'static str]) -> Vec<&'static str> {
let mut outputs: Vec<&str> = vec![];

// Find the case-insensitive, sorted word to check
let mut s_sorted: Vec<_> = s.to_string().to_lowercase().chars().collect();
s_sorted.sort();

for word in v {
// Case-desensitize and sort each word in the slice
let mut word_sorted: Vec<_> = word.to_string().to_lowercase().chars().collect();
word_sorted.sort();

// if the case-insensitive words are the same post sort and not presort (to avoid self-anagrams), add it to the vector
if word_sorted == s_sorted && s.to_string().to_lowercase() != word.to_string().to_lowercase() {
outputs.push(word)
}
}
outputs
}

这按预期工作,但不是很地道。我现在正在尝试使用 Rust 的更多功能特性的第二次迭代:

pub fn anagrams_for(s: &'static str, v: &[&'static str]) -> Vec<&'static str> {
let mut s_sorted: Vec<_> = s.to_string().to_lowercase().chars().collect();
s_sorted.sort();

v.iter().map(&|word: &str| {
let mut word_sorted: Vec<_> = word.to_string().to_lowercase().chars().collect();
word_sorted.sort();

if word_sorted == s_sorted && s.to_string().to_lowercase() != word.to_string().to_lowercase() {
word
}
}).collect()
}

我目前遇到了一些错误(其中大部分我可能会解决),但我有兴趣解决的是

if may be missing an else clause:
expected `()`,
found `&str`
(expected (),
found &-ptr) [E0308]

这是因为在非变位词的情况下,map 试图将某些东西插入向量(看似 ())。

我该如何处理? map 可能不是最好的习惯用法,因为它需要对列表中的每个 元素执行一些操作,而不是子集(可能是 filter?).

最佳答案

如您所见,问题是在非变位词情况下,您的闭包(|| { ... } block )不返回值。

您可以使用 filter_map 解决此问题而不是 map .该函数采用一个返回 Option<U> 的闭包。而不是 U ,所以闭包的最后一个表达式看起来像这样:

if /* ... */ {
Some(word)
} else {
None
}

与主要问题无关,关于您的代码的一些注释:

  • 您可以删除 .to_string().to_lowercase()之前打电话电话。后一种方法属于类型 str ,所以它工作正常。打电话to_string()添加不必要的分配。
  • &在闭包前面 ( &|...| ) 很可能被删除...
  • ... : &str 也可以在闭包参数列表中输入注解

关于functional-programming - 在 map 内部使用 if 时如何处理 "if may be missing an else clause"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36230664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com