Obeta

Rust中一道题精彩解法

这是我在codewars中遇到的一个题,题目非常简单,而且思路很清晰,但是我写出来后看到别人的解法非常简洁,因此做个记录学习一下.

这道题的链接.题目给出一句话,这句话里每个单词有一个数字,代表了他应该排序的位置,你需要把它正确排序出来,比如输入"is2 thi1s t4est 3a",那么结果应该是"thi1s is2 3a t4est".

首先给出我的一个解法:

fn order(sentence: &str) -> String {
	if sentence.len() == 0 {
		return String::from("");
	}
	let words: Vec<&str> = sentence.split(' ').collect();

	let mut result = words.clone();
	for charts in words {
		let mut index = 0;
		for ch in charts.chars() {
			if let Some(v) = ch.to_digit(10) {
				index = v;
			}
		}
		result[(index - 1) as usize] = charts;
	}
	result.join(" ")
}

然后我看到的一个解法:

fn order(sentence: &str) -> String {
	let mut ws: Vec<_> = sentence.split_whitespace().collect();
	ws.sort_by_key(|s| s.chars().find(|c| c.is_digit(10)).unwrap());
	ws.join(" ")
}

非常的简单整洁,如果说要写出这类解法,那么文档肯定是要多读几遍的,做到各种方法烂熟于心,也需要多使用,否则也很容易忘记.

个人随笔记录,内容不保证完全正确,若需要转载,请注明作者和出处.