Skip to content

Commit

Permalink
Use DictionaryArray's iterator (#1330)
Browse files Browse the repository at this point in the history
  • Loading branch information
viirya committed Feb 28, 2022
1 parent 5737449 commit f58a8d9
Showing 1 changed file with 16 additions and 17 deletions.
33 changes: 16 additions & 17 deletions arrow/src/compute/kernels/comparison.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2213,27 +2213,26 @@ macro_rules! compare_dict_op {
.to_string(),
));
}
let left_values = $left.values().as_any().downcast_ref::<$value_ty>().unwrap();
let right_values = $right

let left_iter = $left
.values()
.as_any()
.downcast_ref::<$value_ty>()
.unwrap();
.unwrap()
.take_iter($left.keys_iter());

let result = $left
.keys()
.iter()
.zip($right.keys().iter())
.map(|(left_key, right_key)| {
if let (Some(left_k), Some(right_k)) = (left_key, right_key) {
let left_key = left_k.to_usize().expect("Dictionary index not usize");
let right_key =
right_k.to_usize().expect("Dictionary index not usize");
unsafe {
let left_value = left_values.value_unchecked(left_key);
let right_value = right_values.value_unchecked(right_key);
Some($op(left_value, right_value))
}
let right_iter = $right
.values()
.as_any()
.downcast_ref::<$value_ty>()
.unwrap()
.take_iter($right.keys_iter());

let result = left_iter
.zip(right_iter)
.map(|(left_value, right_value)| {
if let (Some(left), Some(right)) = (left_value, right_value) {
Some($op(left, right))
} else {
None
}
Expand Down

0 comments on commit f58a8d9

Please sign in to comment.