Matlab for循环和if语句简化
Matlab for loop and if statement simplification
您好,我正在编写函数来找出几天内操作之间的最大差距。但是我想在 java.
中简化 for 循环和 if 到像 Lambda 这样的单行代码
function [retObj] = find_gaps (data, n)
[~,n1] = size(data);
dates = 1;
gaps = 1;
for i = 1:n1
if i > 1
gap = data(i) - data(i-1);
dates(end+1) = data(i-1);
gaps(end+1) = gap;
end
end
dates(1) = [];
gaps(1) = [];
fprintf('Highest gaps:\n');
for i = 1:n
[val,key] = max(gaps);
fprintf('%s gap: %d\n',datestr(dates(key)), val);
gaps(key) = [];
dates(key) = [];
end
这里的主要任务是找到差距,即data
中两个后续条目之间的差异。这可以通过 diff
函数有效地完成:只需调用 diff(data)
.
剩下的只是关于创建正确的输出:我们必须对后代问题中的空白进行排序,例如使用 sort
函数。注意:我们也使用了 sort
的第二个输出,即索引。
[gap, ind] = sort(diff(data), 'descend');
接下来,我们创建一个包含所有输出的元胞数组(将所有 data
条目转换为 datestr
并将它们放入一个元胞中。将间隙添加到该元胞数组。最后转置让所有日期在第一行,所有空缺在第二行):
out = [ cellstr(datestr(data(ind).')),
mat2cell(gap.',ones(1,numel(gap)))
].';
并让一切运行通过fprintf
函数:
fprintf('%s gap: %d\n', out{:})
不幸的是,它不是单行代码,但它仍然删除了所有 for 和 if。这是一个例子:
data = [1000, 1001, 1002, 1005, 1006, 1018, 1019, 1021];
[gap, ind] = sort(diff(data), 'descend');
out = [cellstr(datestr(data(ind).')), mat2cell(gap.',ones(1,numel(gap)))].';
fprintf('%s gap: %d\n', out{:})
导致
02-Oct-0002 gap: 12
28-Sep-0002 gap: 3
15-Oct-0002 gap: 2
26-Sep-0002 gap: 1
27-Sep-0002 gap: 1
01-Oct-0002 gap: 1
14-Oct-0002 gap: 1
您好,我正在编写函数来找出几天内操作之间的最大差距。但是我想在 java.
中简化 for 循环和 if 到像 Lambda 这样的单行代码function [retObj] = find_gaps (data, n)
[~,n1] = size(data);
dates = 1;
gaps = 1;
for i = 1:n1
if i > 1
gap = data(i) - data(i-1);
dates(end+1) = data(i-1);
gaps(end+1) = gap;
end
end
dates(1) = [];
gaps(1) = [];
fprintf('Highest gaps:\n');
for i = 1:n
[val,key] = max(gaps);
fprintf('%s gap: %d\n',datestr(dates(key)), val);
gaps(key) = [];
dates(key) = [];
end
这里的主要任务是找到差距,即data
中两个后续条目之间的差异。这可以通过 diff
函数有效地完成:只需调用 diff(data)
.
剩下的只是关于创建正确的输出:我们必须对后代问题中的空白进行排序,例如使用 sort
函数。注意:我们也使用了 sort
的第二个输出,即索引。
[gap, ind] = sort(diff(data), 'descend');
接下来,我们创建一个包含所有输出的元胞数组(将所有 data
条目转换为 datestr
并将它们放入一个元胞中。将间隙添加到该元胞数组。最后转置让所有日期在第一行,所有空缺在第二行):
out = [ cellstr(datestr(data(ind).')),
mat2cell(gap.',ones(1,numel(gap)))
].';
并让一切运行通过fprintf
函数:
fprintf('%s gap: %d\n', out{:})
不幸的是,它不是单行代码,但它仍然删除了所有 for 和 if。这是一个例子:
data = [1000, 1001, 1002, 1005, 1006, 1018, 1019, 1021];
[gap, ind] = sort(diff(data), 'descend');
out = [cellstr(datestr(data(ind).')), mat2cell(gap.',ones(1,numel(gap)))].';
fprintf('%s gap: %d\n', out{:})
导致
02-Oct-0002 gap: 12
28-Sep-0002 gap: 3
15-Oct-0002 gap: 2
26-Sep-0002 gap: 1
27-Sep-0002 gap: 1
01-Oct-0002 gap: 1
14-Oct-0002 gap: 1