假設你有以下類型的歌曲一個Erlang紀錄:二郎:在記錄
rd(song, {artist, title, album}).
Song = #song{artist = <<"oasis">>, title = <<"wonderwall">>, album = <<"morning glory">>}.
但是你要重新格式化的歌曲記錄只包含藝術家和標題。你將如何去除Erlang記錄中的字段(在這個例子中是專輯)?
假設你有以下類型的歌曲一個Erlang紀錄:二郎:在記錄
rd(song, {artist, title, album}).
Song = #song{artist = <<"oasis">>, title = <<"wonderwall">>, album = <<"morning glory">>}.
但是你要重新格式化的歌曲記錄只包含藝術家和標題。你將如何去除Erlang記錄中的字段(在這個例子中是專輯)?
從某種意義上說,你不能在記錄全部在編譯時完成,所以它們並不真實存在。你是#song
記錄變成了元組{song,Artist,Title,Album}
。它是這樣定義的。見Erlang -- Records。你需要做的是定義一個新的#song
記錄並手動轉換所有歌曲,即創建新的元組。記住所有數據都是不可變的。
已經有很多建議來實現更動態的字段對象,但是還沒有被接受。
閱讀Erlang文檔,它通常相當不錯。
如果你確實真的想從現有記錄元組中實際刪除一個字段,那麼這是可能的。
您可以使用tuple_to_list
和list_to_tuple
函數,也可以使用#song.title
語法來獲取字段的索引,將其從列表中移除並轉換回元組。
但這可能不是一個好主意。
你覺得有序的詞典更合適嗎? – 2010-09-19 20:03:04
如果您正在使用proplists處理少量元素,應該非常高效。 Proplists是這樣的2元組元素列表:'[{artist,「Queen」},{song,「We Will Rock You」},{專輯,「世界新聞報」}]' – gleber 2010-09-20 05:32:24
proplist將罰款爲每首歌曲的數據。這會慢一點,但會更加動態。使用有序字典或任何其他形式的字典也是如此。對於你正在做的事情,'orddict'的行爲與'proplist'大致相同。不要使用'dict',因爲空字典的開銷較大,並且每首歌曲的數據可能不會太多。現在的問題是如何存儲所有歌曲的數據以及如何爲它們編制索引。因爲這個「dict」是合理的,或者是ets表。 – rvirding 2010-09-23 15:17:00