name value pairs with variable input arguments
Mostrar comentarios más antiguos
write a function called name_value_pair that has a variable no of input arguments representing name value pairs.The function must be called with even number of input arguments.The functiion returns a single cell array that has exactly two columns. First with names and another with values.If the functiion is called with no input arguments or odd number of input arguments or if the name is not of char type then it should return an empty cell array
function db = name_value_pairs(varargin)
if rem(nargin,2) ~= 0 || nargin < 2
db = {};
return
end
if ~ischar(varargin(1:2:nargin))
db = {};
end
for i = 1:nargin/2
db(i,1) = varargin(2*i-1);
db(i,2) = varargin(2*i);
end
end
this is code that i have written and ii cant understand where the error is. please help me with this.
3 comentarios
KSSV
el 17 de Ag. de 2020
What error you are getting?
M NAGA JAYANTH AVADHANI
el 17 de Ag. de 2020
Editada: M NAGA JAYANTH AVADHANI
el 17 de Ag. de 2020
hesham hany
el 18 de Ag. de 2020
+1
but I didn't get the answer below
Respuesta aceptada
Más respuestas (5)
Sovendo Talapatra
el 20 de Ag. de 2020
Editada: Sovendo Talapatra
el 20 de Ag. de 2020
for j = 1:2:nargin
if ~ischar(varargin{j})
db = {};
return
else
continue
end
By using for loop you can easily fix the code
Abdul Quadir Khan
el 7 de Nov. de 2020
function db = name_value_pairs(varargin)
if rem(nargin,2) ~= 0 || nargin < 2
db = {};
return
end
if ~ischar(varargin(1:2:nargin))
db = {};
else %changed
end
for i = 1:nargin/2
db(i,1) = varargin(2*i-1);
db(i,2) = varargin(2*i);
end
for j = 1:2:nargin
if ~ischar(varargin{j})
db = {};
return
else
continue
end
end
Selman Baysal
el 11 de En. de 2022
"varargin" is a cell array; this is why we cannot use something like varargin{1:2:nargin} and ~ischar(varargin(1:2:nargin)) gives 1 everytime. I think using two different for loops make this problem easier like:
function db = name_value_pairs(varargin)
l = nargin;
if rem(l,2) ~= 0 || l < 2
db = {};
return
end
for ii = 1:2:l
if ~ischar(varargin{ii})
db = {};
return
end
end
for ii = 1:l/2
db(ii,1) = varargin(2*ii-1);
db(ii,2) = varargin(2*ii);
end
end
Yifan He
el 3 de Ag. de 2022
function db = name_value_pairs(varargin)
if nargin == 0
db = {};
elseif nargin/2 ~= fix(nargin/2)
db = {};
elseif sum(cellfun(@ischar,varargin(1:2:end))) ~= nargin/2
db = {};
else
db(:,1) = varargin(1:2:end);
db(:,2) = varargin(2:2:end);
end
José Armando Velasco Villagomez
el 8 de En. de 2023
Editada: José Armando Velasco Villagomez
el 8 de En. de 2023
Check this function it may solve your problem.
function db = name_value_pairs(varargin)
if nargin == 0 || rem(nargin,2) || sum(cellfun(@ischar,varargin(1:2:end))) ~= nargin/2
db = {};
else
db = [(varargin(1:2:end))',(varargin(2:2:end))'];
end
end
Categorías
Más información sobre Whos en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!