作为一名 Rust 新手,我正在解决Project Euler问题,以帮助我了解这门语言。问题 4 涉及回文,我找到了两个用于创建回文向量的解决方案,但我不确定它们中的任何一个是如何工作的。
我正在使用一个字符串向量products
,它是这样计算的:
let mut products = Vec::new();
for i in 100..500 {
for j in 500..1000 {
products.push((i * j).to_string());
}
}
为了将这些产品过滤到只有回文的产品,我有以下两种解决方案:
解决方案1:
let palindromes: Vec<_> = products
.iter()
.filter(|&x| x == &x.chars().rev().collect::<String>())
.collect();
解决方案2:
let palindromes: Vec<_> = products
.iter()
.filter(|&x| *x == *x.chars().rev().collect::<String>())
.collect();
他们都产生了正确的结果,但我不知道为什么!
在解决方案 1 中,我们将字符串的引用与我们刚刚创建的字符串的引用进行比较?
在解决方案 2 中,我们取消引用对字符串的引用并将其与取消引用的新字符串进行比较?
我希望能够做到的事情:
let palindromes: Vec<_> = products
.iter()
.filter(|x| x == x.chars().rev().collect::<String>())
.collect();
我希望有人能够向我解释:
- 我的两种解决方案有什么区别,为什么它们都有效?
- 为什么我不能
x
在我的过滤器函数中不引用或取消引用它就使用它?
谢谢!