【发布时间】:2021-01-12 20:53:34
【问题描述】:
我正在应用设计工具中创建一个应用。我想要做的是在选择一个或多个选项时,这些选项被赋值为 1。
列表(即“列”)按以下方式读取,并将列表选项分配给默认值为0的结构变量。
table1 = readtable("file.xls");
for i = 1:length(rmmissing(table1{:,"Column"}))
s.(char(rmmissing(table1{i,"Column"}))) = 0;
end
这会输出下表。
s.Anna = 0
s.Bett = 0
s.Cyrielle = 0
s.Dylan = 0
我的问题是,每当我突出显示其中一个选项时,我都无法找到将值从 0 更新为 1 的方法。我不知道如何从本质上获取选定的值并对其进行更新。
例如,如果我突出显示“Anna”和“Cyrielle”,它们应该更新为 1,如下所示。
s.Anna = 1
s.Bett = 0
s.Cyrielle = 1
s.Dylan = 0
我尝试了类似的 if 语句。虽然这可行,但这意味着我必须对名称进行硬编码,这是我不想要的。所以它需要动态挑选出被选中的名字。
if app.ColumnListBox.Value == "Anna"
s.Anna = 1;
else
s.Anna = 0;
end
列表框如下所示: Listbox
选择一个名字时我得到的输出是:
s =
struct with fields:
Anna: 1
Bett: 0
Cyrielle: 0
Dylan: 0
但是,如果我选择多个选项,一切都会变为 0: Multiple names
s =
struct with fields:
Anna: 0
Bett: 0
Cyrielle: 0
Dylan: 0
现在的代码如下:
names = fieldnames(s);
for j = 1:numel(names)
name = names{j};
if app.ListBox.Value == string(name)
s.(name) = 1;
else
s.(name) = 0;
end
end
assignin("base","s",s)
任何帮助将不胜感激!
【问题讨论】:
-
你试过什么?你的具体问题是什么?你看过
assignin函数文档吗?将松散变量分配给您的工作区是不好的做法,因为您几乎无法控制覆盖或名称安全性,更好的计划是将它们分配给具有命名字段的结构。 -
@Wolfie,我更新了帖子。希望现在更清楚一点。