Arrange array elements in 1st column w.r.t corresponding values in 2nd column

조회 수: 2 (최근 30일)
Hi,
I have an array like this:
A=[1 9
1 14
3 11
5 13
7 15
9 17
11 19
14 21]
I want to arrange the elements like:
[ 1 3 5 7
9 11 13 15
14 19 0 0
17 0 0 0
21 0 0 0]
The logic is :
For element '1': 9 &14 is corresponding to 1 and then 17 & 21 is corresponding to 9 & 14.So I need 1,9,14,17 & 21 in one column.
Similarly, for '3' : 11 is corresponding to 3 and 19 is corresponding to 11. So, 3, 11 &19 in second column
And so on.

채택된 답변

Stephen23
Stephen23 2021년 6월 15일
A = [1,9;1,14;3,11;5,13;7,15;9,17;11,19;14,21]
A = 8×2
1 9 1 14 3 11 5 13 7 15 9 17 11 19 14 21
B = myfun(A)
B = 5×4
1 3 5 7 9 11 13 15 14 19 0 0 21 0 0 0 17 0 0 0
function out = myfun(inp)
out = [];
while numel(inp)
vec = recfun(inp(1),inp(1));
out(1:numel(vec),end+1) = vec;
end
%
function vec = recfun(vec,val)
idx = find(inp(:,1)==val);
vec = [vec(:);inp(idx,2)];
for k = numel(idx):-1:1
tmp = inp(idx(k),2);
inp(idx(k),:) = [];
vec = recfun(vec,tmp);
end
end
end

추가 답변 (1개)

Sailesh Kalyanapu
Sailesh Kalyanapu 2021년 6월 15일
Hi,
One approach to do that would be to first create a Hash-table like structure from the given data.
%%% Create two variables Keys and Values
%%% Consider a number pair to be represented as (a,b)
%%% Keys contain all possible unique a's in the given input.
%%% ith row of Values corresponds to all b's related to a directly.
M = containers.Map(Keys,Values);
Once the Hash-table is populated, you could iterate and create columns in the result matrix by taking the first key and appending the values of that key to the values of the elements in the valueset taken as key recursively. The elements once considered in recursion can be deleted from Hash-table keys and once the end of recursion is reached the process is repeated with the next available key in the Hash-table.
You can refer Map Containers to implement the same. You can also refer to this

카테고리

Help CenterFile Exchange에서 Dictionaries에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by