Skip to content

Commit c727b24

Browse files
committed
Changed from_pairs to from_map for SparseVector
1 parent 9ef65f6 commit c727b24

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

src/sparsevec.rs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,15 @@ impl SparseVector {
3535
}
3636
}
3737

38-
/// Creates a sparse vector from `(index, value)` pairs.
39-
pub fn from_pairs<I: IntoIterator<Item = (i32, f32)>>(pairs: I, dim: usize) -> SparseVector {
40-
let mut elements: Vec<(i32, f32)> = pairs.into_iter().filter(|v| v.1 != 0.0).collect();
41-
elements.sort_by_key(|v| v.0);
42-
let indices: Vec<i32> = elements.iter().map(|v| v.0).collect();
43-
let values: Vec<f32> = elements.iter().map(|v| v.1).collect();
38+
/// Creates a sparse vector from a map of non-zero elements.
39+
pub fn from_map<'a, I: IntoIterator<Item = (&'a i32, &'a f32)>>(
40+
map: I,
41+
dim: usize,
42+
) -> SparseVector {
43+
let mut elements: Vec<(&i32, &f32)> = map.into_iter().filter(|v| *v.1 != 0.0).collect();
44+
elements.sort_by_key(|v| *v.0);
45+
let indices: Vec<i32> = elements.iter().map(|v| *v.0).collect();
46+
let values: Vec<f32> = elements.iter().map(|v| *v.1).collect();
4447

4548
SparseVector {
4649
dim,
@@ -107,7 +110,7 @@ impl SparseVector {
107110
#[cfg(test)]
108111
mod tests {
109112
use crate::SparseVector;
110-
use std::collections::HashMap;
113+
use std::collections::{BTreeMap, HashMap};
111114

112115
#[test]
113116
fn test_from_dense() {
@@ -119,19 +122,22 @@ mod tests {
119122
}
120123

121124
#[test]
122-
fn test_from_pairs_map() {
123-
let pairs = HashMap::from([(0, 1.0), (2, 2.0), (4, 3.0)]);
124-
let vec = SparseVector::from_pairs(pairs, 6);
125+
fn test_from_hash_map() {
126+
let map = HashMap::from([(0, 1.0), (2, 2.0), (4, 3.0)]);
127+
let vec = SparseVector::from_map(&map, 6);
125128
assert_eq!(vec![1.0, 0.0, 2.0, 0.0, 3.0, 0.0], vec.to_vec());
126129
assert_eq!(6, vec.dimensions());
127130
assert_eq!(&[0, 2, 4], vec.indices());
128131
assert_eq!(&[1.0, 2.0, 3.0], vec.values());
129132
}
130133

131134
#[test]
132-
fn test_from_pairs_vec() {
133-
let pairs = vec![(0, 1.0), (2, 2.0), (4, 3.0)];
134-
let vec = SparseVector::from_pairs(pairs, 6);
135+
fn test_from_btree_map() {
136+
let map = BTreeMap::from([(0, 1.0), (2, 2.0), (4, 3.0)]);
137+
let vec = SparseVector::from_map(&map, 6);
135138
assert_eq!(vec![1.0, 0.0, 2.0, 0.0, 3.0, 0.0], vec.to_vec());
139+
assert_eq!(6, vec.dimensions());
140+
assert_eq!(&[0, 2, 4], vec.indices());
141+
assert_eq!(&[1.0, 2.0, 3.0], vec.values());
136142
}
137143
}

0 commit comments

Comments
 (0)