在迭代任意數量的列表中的所有值組合我發布了一個答案,需要將一個列表插入到另一個列表列表中。 InsertInto 函數將插入的列表解包為元素,這不是我想要的。 我對列表末尾之外的元素使用了賦值語句,這確實將列表作為元素插入。 另一種選擇是在插入之前將列表包裝在另一個列表中(因此它會解壓縮包裝的列表,並插入原始列表。)
有沒有更好的方法將清單插入清單? result 和 p 都是列表。
結果[ N 項(結果) + 1 ] = p有點囉嗦,但很有效,而且看起來相當清楚,p 儲存在清單中最後一個元素之後。 適合擴展,但無法插入其他地方。
結果={“a”};
p={"b","c"};
結果[N 項( 結果 ) + 1] = p; // 囉嗦,但意圖很明確
顯示(結果);
/*:
結果= {“a”,{“b”,“c”}}; // 好的
插入(結果,p)不起作用,因為它插入的是 p 的元素,而不是 p。
結果={“a”};
p={"b","c"};
插入(結果,p); // 看起來不錯,但...
顯示(結果);
/*:
結果= {“a”,“b”,“c”}; // 不是我想要的
insertinto( 結果, evallist( { p } ) )有效,但似乎不如作業可讀。 可以插入任何地方,但會產生額外的副本。
結果={“a”};
p={"b","c"};
insertinto( 結果, evallist( { p } ) ) ; // 製作清單的額外副本並且難以閱讀
顯示(結果);
/*:
結果= {“a”,{“b”,“c”}}; // 好:我想要的
是的。 我使用過 evallist() 方法,但總覺得它需要註解來解釋。 在我的原始程式碼(頂部連結)中,我在插入之間不斷更改 p,因此它不能只插入對 p 的引用。
下次我可能會用它。 它看起來更簡單,即使它使用更複雜的(在幕後)資料結構,而且因為我已經用 nitems(...)+1 產生索引...是的,它可能是更好的選擇。
這不是一個直接的解決方案,但更多的是作為一種解決方案,我傾向於使用關聯數組,類似於@pmroz在您的連結中建議。
FWIW 在第二個範例中我總是以 EvalList ( ) 方式進行操作。 我想你可以這樣做,直到你想要/需要時才進行評估......不確定這是否會給你帶來很多好處(?)
result = {"a"};
p = {"b", "c"};
Insert Into( result, {p} ); //don't evaluate p here... but of course p is non-static
show(result[2][1]); //can still access elements of p if desired
Show( Eval List( result ) ); //or can eval to see the whole thing
