面试题答案
一键面试-
特质定义:
- 定义一个名为
Counter
的特质,用于描述统计特定元素出现次数的行为。
trait Counter<T> { fn count(&self, target: &T) -> u32; }
- 这里的
T
是泛型类型参数,代表要统计的元素类型。count
方法接受一个指向目标元素的引用,并返回该目标元素在实现Counter
特质的实例中出现的次数。
- 定义一个名为
-
泛型类型参数的约束:
- 对于
Counter
特质的泛型类型参数T
,它需要满足PartialEq
特质,因为在统计时需要比较元素是否相等。可以在特质定义时通过where
子句添加约束:
trait Counter<T> where T: PartialEq, { fn count(&self, target: &T) -> u32; }
- 对于
-
关键的函数实现逻辑:
- 字符计数器实现:
struct CharCounter(String); impl Counter<char> for CharCounter { fn count(&self, target: &char) -> u32 { self.0.chars().filter(|c| c == target).count() as u32 } }
CharCounter
结构体封装了一个String
类型,用于存储要统计的字符序列。count
方法使用filter
方法过滤出与目标字符相等的字符,并返回其数量。
- 整数数组特定整数计数器实现:
struct IntArrayCounter(Vec<i32>); impl Counter<i32> for IntArrayCounter { fn count(&self, target: &i32) -> u32 { self.0.iter().filter(|i| i == target).count() as u32 } }
IntArrayCounter
结构体封装了一个i32
类型的Vec
,用于存储整数数组。count
方法通过filter
方法过滤出与目标整数相等的元素,并返回其数量。
- 字符计数器实现:
-
使用示例:
fn main() { let char_counter = CharCounter(String::from("hello world")); let char_count = char_counter.count(&'l'); println!("Character 'l' count: {}", char_count); let int_counter = IntArrayCounter(vec![1, 2, 3, 2, 4, 2]); let int_count = int_counter.count(&2); println!("Integer 2 count: {}", int_count); }
- 在
main
函数中,分别创建了CharCounter
和IntArrayCounter
的实例,并调用count
方法统计特定字符和整数的出现次数。这样基于泛型和特质的架构就实现了对不同类型数据特定元素的统计,具有高度的可复用性和扩展性。
- 在