为什么列表框中不能有重复值?如果我运行这个:
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”}
回复:为什么列表框中不能有重复的值?列表框旨在显示用户界面中可供选择的项目。 你只是指出了这个对象的行为。 如果用户具有相同的值,他们如何知道他们想要哪个项目? 也许另一个展示盒可以满足您的目的,但您尚未分享。
回复:为什么列表框中不能有重复的值?我没有找到指定列表框中仅显示唯一值列表的文档,但在我对其进行测试时,确实似乎与列表框关联的列表框中的每个特定值仅显示一个条目() 目的..