1+ #![ allow( unused) ]
12use better_comprehension:: {
23 b_tree_map, b_tree_set, binary_heap, hash_map, hash_set, iterator_ref, linked_list, vec_deque,
34 vector,
@@ -19,6 +20,7 @@ fn main() {
1920 test_nested_comprehension ( ) ;
2021 test_ownership_handling ( ) ;
2122 test_option ( ) ;
23+ some_real_example_2 ( ) ;
2224}
2325
2426fn test_vec ( ) {
@@ -355,15 +357,103 @@ fn test_ref_iterator() {
355357fn test_option ( ) {
356358 let vec = [ Some ( "1" . to_string ( ) ) , None , Some ( "3" . to_string ( ) ) ] ;
357359
358- let _result = vector ! [
360+ let result = vector ! [
359361 x. clone( )
360362 for x in vec. iter( ) . flatten( )
361363 ] ;
362364
363- let mut result = Vec :: new ( ) ;
364- for x in vec. iter ( ) . flatten ( ) {
365- result. push ( x. clone ( ) ) ;
366- }
365+ let result = {
366+ let mut result = Vec :: new ( ) ;
367+ for x in vec. iter ( ) . flatten ( ) {
368+ result. push ( x. clone ( ) ) ;
369+ }
370+ result
371+ } ;
367372
368373 assert_eq ! ( result, vec![ "1" . to_string( ) , "3" . to_string( ) ] ) ;
369374}
375+
376+ fn some_real_example_1 ( ) {
377+ // 创建3x3矩阵
378+ let matrix = vector ! [
379+ vector![ i * 3 + j + 1 for j in 0 ..3 ]
380+ for i in 0 ..3
381+ ] ;
382+
383+ // 矩阵转置
384+ let transposed = vector ! [
385+ vector![ row[ i]
386+ for row in matrix. iter( ) ]
387+ for i in 0 ..3
388+ ] ;
389+ // matrix is alive
390+ assert_eq ! ( matrix, vec![ vec![ 1 , 2 , 3 ] , vec![ 4 , 5 , 6 ] , vec![ 7 , 8 , 9 ] ] ) ;
391+ assert_eq ! (
392+ transposed,
393+ vec![ vec![ 1 , 4 , 7 ] , vec![ 2 , 5 , 8 ] , vec![ 3 , 6 , 9 ] ]
394+ ) ;
395+ }
396+
397+ fn some_real_example_2 ( ) {
398+ #[ derive( Debug , PartialEq , Eq ) ]
399+ struct Score {
400+ subject : String ,
401+ score : u8 ,
402+ }
403+ #[ derive( Debug , PartialEq , Eq ) ]
404+ struct Student {
405+ name : String ,
406+ age : u8 ,
407+ scores : Vec < Score > ,
408+ }
409+
410+ let students_data = [
411+ Student {
412+ name : "Alice" . to_string ( ) ,
413+ age : 20 ,
414+ scores : vec ! [
415+ Score {
416+ subject: "Math" . to_string( ) ,
417+ score: 95 ,
418+ } ,
419+ Score {
420+ subject: "English" . to_string( ) ,
421+ score: 88 ,
422+ } ,
423+ ] ,
424+ } ,
425+ Student {
426+ name : "Bob" . to_string ( ) ,
427+ age : 21 ,
428+ scores : vec ! [
429+ Score {
430+ subject: "Math" . to_string( ) ,
431+ score: 78 ,
432+ } ,
433+ Score {
434+ subject: "English" . to_string( ) ,
435+ score: 85 ,
436+ } ,
437+ ] ,
438+ } ,
439+ ] ;
440+
441+ // for student in &students_data {
442+ // for score in &student.scores {
443+ // if score.subject == "Math" {
444+ // println!("{}: {}", student.name, score.score);
445+ // }
446+ // }
447+ // }
448+
449+ let math_scores: HashMap < & String , u8 > = hash_map ! [
450+ & student. name => score. score
451+ for student in & students_data
452+ for score in & student. scores if score. subject == "Math"
453+ ] ;
454+
455+ assert_eq ! (
456+ math_scores,
457+ HashMap :: from( [ ( & "Alice" . to_string( ) , 95 ) , ( & "Bob" . to_string( ) , 78 ) ] )
458+ ) ;
459+ }
0 commit comments