Path: blob/main/crates/polars-arrow/src/array/equal/struct_.rs
6939 views
use crate::array::{Array, StructArray};12pub(super) fn equal(lhs: &StructArray, rhs: &StructArray) -> bool {3lhs.dtype() == rhs.dtype()4&& lhs.len() == rhs.len()5&& match (lhs.validity(), rhs.validity()) {6(None, None) => lhs.values().iter().eq(rhs.values().iter()),7(Some(l_validity), Some(r_validity)) => lhs8.values()9.iter()10.zip(rhs.values().iter())11.all(|(lhs, rhs)| {12l_validity.iter().zip(r_validity.iter()).enumerate().all(13|(i, (lhs_is_valid, rhs_is_valid))| {14if lhs_is_valid && rhs_is_valid {15lhs.sliced(i, 1) == rhs.sliced(i, 1)16} else {17lhs_is_valid == rhs_is_valid18}19},20)21}),22(Some(l_validity), None) => {23lhs.values()24.iter()25.zip(rhs.values().iter())26.all(|(lhs, rhs)| {27l_validity.iter().enumerate().all(|(i, lhs_is_valid)| {28if lhs_is_valid {29lhs.sliced(i, 1) == rhs.sliced(i, 1)30} else {31// rhs is always valid => different32false33}34})35})36},37(None, Some(r_validity)) => {38lhs.values()39.iter()40.zip(rhs.values().iter())41.all(|(lhs, rhs)| {42r_validity.iter().enumerate().all(|(i, rhs_is_valid)| {43if rhs_is_valid {44lhs.sliced(i, 1) == rhs.sliced(i, 1)45} else {46// lhs is always valid => different47false48}49})50})51},52}53}545556