我正在应用程序设计器中创建一个应用程序。我想做的是,当选择一个或多个选项时,这些选项的值为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的方法。我不知道如何从本质上获取选定的值并更新它。
例如,如果我突出显示";安娜;以及";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
列表框如下所示:列表框
当选择一个名称时,我得到的输出是:
s =
struct with fields:
Anna: 1
Bett: 0
Cyrielle: 0
Dylan: 0
但是,如果我选择了多个选项,则所有选项都将为0:多个名称
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)
任何帮助都将不胜感激!
您应该能够使用之类的东西来减少if
条件的硬编码
names = fieldnames(s);
for iField = 1:numel(names)
% Assign current name to variable, e.g. "Anna"
name = names{iField};
% loop over the fields and check if selected
if app.ColumnListBox.Value == string(name)
s.(name) = 1;
else
s.(name) = 0;
end