在极地,我看到的返回结果与我所期望的不同,当我使用切片与串联和试图得到的偏移。
我正在创建一个系列,然后切片它:
// Make a vec of 3 items, called foo, bar baz
let string_values: Vec<&str> = vec!["foo", "bar", "baz"];
// Add it to a series, this is without dataframes
let series = Series::new("string_values", string_values);
//shape: (3,)
// Series: 'string_values' [str]
// [
// "foo"
// "bar"
// "baz"
// ]
println!("{:?}", series);这将返回一个新的系列。
然后,我可以使用downcast_iter()获取偏移量:
// Now we should be able to downcast iter to get the offsets.
// returns [0, 3, 6, 9]
// 0-3 = foo
// 3-6 = bar
// 6-9 = baz
series.utf8().unwrap().downcast_iter().for_each(|array| {
println!("{:?}", array.offsets());
});到目前为止还不错。
然后我切了它:
//shape: (2,)
// Series: 'string_values' [str]
// [
// "bar"
// "baz"
// ]
let series_slice = series.slice(1, 2);
println!("{:?}", series_slice);这将返回正确的值。
然后,我再次尝试使用downcast_iter():
// Now we should be able to downcast iter to get the offsets for the slice.
// This returns [3, 6, 9]
// Is "foo" still referenced?
series_slice.utf8().unwrap().downcast_iter().for_each(|array| {
println!("{:?}", array.offsets());
});它返回3,6,9。为什么返回9?这个系列的长度是6。
发布于 2022-07-05 13:26:10
箭头中的缓冲区可以共享。除了数据之外,他们还有一个offset和一个length。
原始箭头字符串数组包含以下数据:
data: foobarbaz
offsets: 0, 3, 6, 9
offset: 0
length: 3检索元素i在伪代码中使用以下算法:
let offset = array.offset
let start_index = offsets[offset + i]
let end_index = offsets[offset + i + 1]
let string_value = data[start_index..end_index]当您分割数组时,我们不会复制任何数据。我们只更新offset和length,这样我们就有了表示切片数组的所有信息:
data: foobarbaz
offsets: 0, 3, 6, 9
offset: 1
length: 2https://stackoverflow.com/questions/72868252
复制相似问题