為什麼列錶框中不能有重複值?如果我運行這個:
lb = List Box({"qwerqwerr", "qwerqwerr"});
nwTest = New Window("Test ListBox Duplicate values", lb);我將得到一個只有一行的列錶框。 為什麼?
列錶框接受列表,列表可以有重複值,為什麼Lis Box不能有重複值?
如果我將包含重複值的列表傳遞到列錶框,則列錶框中顯示的內容不是現在傳遞的帶有其他警告或錯誤的列表。
這是設計使然嗎? 為什麼? 有什麼解決方法嗎?
高級統計建模實驗設計回复:為什麼列錶框中不能有重複的值?您在兩個不同的窗口中將兩個不同的字符串列框命名為相同的名稱。 所以第二個作業會覆蓋第一個作業。
有趣的行為=>無論我按下哪個窗口中的按鈕,第二個窗口都會更新。
回复:為什麼列錶框中不能有重複的值?該“控件”是一個以輪廓框開頭的複合對象。 您可以通過右鍵單擊大綱框並選擇編輯 > 顯示樹結構來調查結構(顯示樹)。 該列表顯示在列錶框中,與您開始使用的對象相同。

回复:為什麼列錶框中不能有重複的值?你說, ”您應該對“scb”使用不同的名稱 - 導致了現在這樣非常有趣的行為。 ” 為何如此?
回复:為什麼列錶框中不能有重複的值?明白了,謝謝!
您應該對“scb”使用不同的名稱 - 導致了現在這樣非常有趣的行為。
無論如何,這裡使用了什麼控件:

在我的腳本中,我使用類似的 GUI 來匹配兩列,只是整個事情稍微複雜一點,並且第二列可能有許多輔助列,我不想在“height=height”行中顯示這些輔助列。 因此存在重複值的可能性。
現在我將其設置為顯示為“height=height;sex,name,age”以使所有內容都獨一無二,但理想情況下我只想顯示主要列。
回复:為什麼列錶框中不能有重複的值?我同意文檔應指出列錶框將使用所提供列表中的唯一項目。 列表參數不需要有唯一的項目。 任何使用該文檔的人都應該做好準備;也就是說,任何可能的行為都是預期的。
因此,即使您的示例是假設的,對象的選擇也取決於其目的。 以下是基於顯示步驟列表的示例的兩種方法,這些步驟在整個路徑上可能不是唯一的。 一種方法使用直接更新,另一種方法使用一系列步驟進行持久化。 (如果需要,第一種方法可以從字符串列框中獲取列表。)
Names Default to Here( 1 );
// directly update list of steps
New Window( "Move It 1",
H List Box(
Outline Box( "Control",
Line Up Box( N Col( 3 ),
Text Box( "" ),
Button Box( "Up",
scb << Add Element( "Up" )
),
Text Box( "" ),
Button Box( "Left",
scb << Add Element( "Left" )
),
Text Box( "" ),
Button Box( "Right",
scb << Add Element( "Right" )
),
,
Text Box( "" ),
Button Box( "Down",
scb << Add Element( "Down" )
),
Text Box( "" )
)
),
Outline Box( "Path",
Table Box(
scb = String Col Box( "Step", {} )
)
)
)
);
//use list as an intermediary structure
updatePath = Function( { list, text, obj },
Insert Into( list, Eval( text ) );
obj << Set( list );
Return( list );
);
path = List();
New Window( "Move It 2",
H List Box(
Outline Box( "Control",
Line Up Box( N Col( 3 ),
Text Box( "" ),
Button Box( "Up",
path = updatePath( path, "Up", scb );
),
Text Box( "" ),
Button Box( "Left",
path = updatePath( path, "Left", scb );
),
Text Box( "" ),
Button Box( "Right",
path = updatePath( path, "Right", scb );
),
Text Box( "" ),
Button Box( "Down",
path = updatePath( path, "Down", scb );
),
Text Box( "" )
)
),
Outline Box( "Path",
Table Box(
scb = String Col Box( "Step", path )
)
)
)
);回复:為什麼列錶框中不能有重複的值?我知道列錶框不是列表。 就是那個它接受列表作為輸入。 文檔中沒有任何地方說列表只需要具有唯一值。 這是一個意想不到的行為。
例如,想像一下,您有一個文本框,它接受字符串作為輸入。 因此它會在一個框中顯示該字符串,除非它以字母“a”開頭。如果字符串以“a”開頭,它不會顯示任何內容。 而且它沒有在任何地方記錄。 對於試圖解決為什麼該文本框有時為空的人來說真是太無賴了,對吧?
回复:為什麼列錶框中不能有重複的值?1. 列錶框不是列表。 它沒有作為數據結構的確切期望或接口。 這是互動的、雙向的溝通。 關聯數組可以解決“問題”。 許多用戶對這些結構不熟悉或不適應,但發現一個可以自然使用的列表。 該列表只是一個參數,為列錶框提供執行其功能所需的數據。 方便的是,重複項會被自動丟棄。
2. 考慮到列錶框是一個呈現唯一選項列表的對象,並有助於與需要選擇一個或多個項目的用戶進行交互,對於出現重複的 UI 組件來說,這是錯誤的選擇。 您必鬚根據您的目的選擇另一個對象。 您的用例需要存儲在 UI 中其他位置所做的選擇的有序列表。 為此,字符串列框可能是一個不錯的選擇。
回复:為什麼列錶框中不能有重複的值?@大衛_伯納姆, @馬克貝利和@tx尼爾森
我的觀點有兩個:
1. 如果它接受列表作為輸入 - 它不應該改變它並按原樣顯示。 基本上,當控件不顯示輸入的內容時,這不是一個好的行為。 如果它需要是唯一的 - 不允許列表,請將其設為關聯數組,其中鍵是行,值要么被忽略,要么是其他東西。 或者,當提供具有重複值的列表作為輸入時,至少拋出某種警告或異常。
2. 如何區分相同的值? 嗯,列表中有順序,對嗎? 我可以想出許多用例,用戶可以使用這種控件來反映算法中的步驟、用戶組裝的相同對象集、要運行的報告等。
例如,我有四個按鈕:“左”、“右”、“上”和“下”。 用戶需要設置一些算法來達到一定的結果。 他通過連續按下按鈕來對此進行編程。 每按一次按鈕都會在列表中添加一個步驟。 列出步驟。 該列表包含相同的步驟。 右,右,上,右,下,下,左。 這是一個清單。 如果不是在所謂的 List Box() 中,我將在哪裡顯示這樣的列表?
回复:為什麼列錶框中不能有重複的值?作為@馬克貝利如上所述,列錶框的設計就是這樣的。
列錶框被設計為用戶界面元素以允許用戶從列表中選擇值,例如{“ImpurityA”、“ImpurityB”、“ImpurityC”、“ImpurityD”}。如果您提供諸如 {"ImpurityA","ImpurityB","ImpurityC","ImpurityD","ImpurityB"} 之類的列表,用戶如何知道是否選擇第 1 個或第 2 個“ImpurityB”。從邏輯上講,應該向用戶呈現唯一的值列表,這就是列錶框的作用。
但我很同情這個問題,因為我通常使用 ListBox 作為滾動日誌來寫入消息。如果我想將一行寫入已經寫入的日誌中,這會導致問題,因為我不能兩次使用同一行。在這個用例中,我通常使用換行符來維護字符串消息,並使用多行文本框顯示該字符串。
如果用例是為了允許用戶進行選擇,那麼可能存在區分上例中的兩個 ImpurityB 的輔助信息,在這種情況下,您可以構建要在列錶框中顯示的複合項目列表:
{“雜質A/批次1”,雜質B/批次1”,...,“雜質B/批次2”}
回复:為什麼列錶框中不能有重複的值?列錶框旨在顯示用戶界面中可供選擇的項目。 你只是指出了這個對象的行為。 如果用戶具有相同的值,他們如何知道他們想要哪個項目? 也許另一個展示盒可以滿足您的目的,但您尚未分享。
回复:為什麼列錶框中不能有重複的值?我沒有找到指定列錶框中僅顯示唯一值列表的文檔,但在我對其進行測試時,確實似乎與列錶框關聯的列錶框中的每個特定值僅顯示一個條目() 目的..