[][src]Struct dary::trie::Trie

pub struct Trie<T: Serialize + DeserializeOwned + Debug> { /* fields omitted */ }

トライ木の実装。 ダブル配列は直接構築することはできないので、トライ木を構築してから変換することで構築する。

Examples

use std::fmt::Debug;
use dary::DoubleArray;
use dary::Trie;
use serde_derive::{Serialize, Deserialize};
 
fn main() {
  let key1 = String::from("foo");
  let key2 = String::from("bar");
  let key3 = String::from("baz");
 
  let sample1 = Sample { surface: key1.clone(), cost: 1 };
  let sample2 = Sample { surface: key1.clone(), cost: 2 };
  let sample3 = Sample { surface: key2.clone(), cost: 1 };
  let sample4 = Sample { surface: key3.clone(), cost: 1 };
 
  let mut trie: Trie<Sample> = Trie::new();
  trie.set(&key1, sample1.clone());
  trie.set(&key1, sample2.clone());
  trie.set(&key2, sample3.clone());
  trie.set(&key3, sample4.clone());
 
  let double_array = trie.to_double_array().ok().unwrap();
  assert_eq!(vec![sample1, sample2], double_array.get(&key1).unwrap());
  assert_eq!(vec![sample3]         , double_array.get(&key2).unwrap());
  assert_eq!(vec![sample4]         , double_array.get(&key3).unwrap());
}
 
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
struct Sample {
    surface: String,
    cost: usize,
}

Methods

impl<T: Serialize + DeserializeOwned + Debug> Trie<T>[src]

pub fn new() -> Trie<T>[src]

pub fn set(&mut self, key: &str, value: T)[src]

trieにノードを追加する 一つのkeyにつき256個までの値を登録できる 超えた場合はpanic

Arguments

  • key - 追加するキー
  • value - キーに対応する値

pub fn get(&self, key: &str) -> Option<&[T]>[src]

trieを探索する keyに対応する値が見つかったら値のスライスを返す

Arguments

  • key - 探索するkey

pub fn to_double_array(self) -> Result<DoubleArray<T>, Error>[src]

トライ木をダブル配列に変換する

Panics

dataをバイト列に変換できなかった場合にpanicする。

Errors

Arguments

  • len - ダブル配列の初期サイズ

Auto Trait Implementations

impl<T> Send for Trie<T> where
    T: Send

impl<T> Sync for Trie<T> where
    T: Sync

impl<T> Unpin for Trie<T> where
    T: Unpin

impl<T> UnwindSafe for Trie<T> where
    T: UnwindSafe

impl<T> RefUnwindSafe for Trie<T> where
    T: RefUnwindSafe

Blanket Implementations

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,