I need to read an array to see if it has repeated elements (using for loop)

20 ビュー (過去 30 日間)
Juan Pérez Álvarez
Juan Pérez Álvarez 2022 年 1 月 20 日
回答済み: Image Analyst 2022 年 1 月 20 日
For example:
Vec = [2,4,4,6];
For this case, element 4 is repeated.
And i want the code do something like this:
iteration # 1
Vec(1) == Vec(2) , Vec(3), Vec(4)
2 == [4,4,6]
iteration # 2
Vec(2) == Vec(3), Vec(4)
4 == [4,6] % In this case theres a repeted number
iteration # 3
Vec(3) == Vec(4)
4 == [6]
I know i need use two for loops (one for read the first element) and the second loop for to compare the elements:
cont =0;
for i=1:length(Vec)-1
for j = length(Vec):1
if Vec(i) == Vec(j+i)
cont = cont+1
end
end
end
Any idea?

回答 (3 件)

Voss
Voss 2022 年 1 月 20 日
You can do it with two for loops like that, but note that if an element occurs more than two times, each pair will be counted, e.g., with Vec = [2 4 4 4], you get Vec(2)==Vec(3), Vec(2)==Vec(4), and Vec(3)==Vec(4). If that's not what you want, you'd have to keep track of which values have been counted aready.
Here's your way of counting repeats, and another possible way.
Note that if all you really need to know is whether there are any repeated elements in a vector (and you don't need to count them), you can simply say: has_repeats = numel(Vec) > numel(unique(Vec));
Vec = [2 4 4 6];
count_repeats(Vec)
ans = 1
count_repeats([2 4 4 4])
ans = 3
count_repeats([2 4 4 4 4 4])
ans = 10
count_repeats_another_way(Vec)
ans = 1
count_repeats_another_way([2 4 4 4])
ans = 2
count_repeats_another_way([2 4 4 4 4 4])
ans = 4
function cont = count_repeats(Vec)
cont = 0;
for i = 1:length(Vec)-1
for j = i+1:length(Vec)
if Vec(i) == Vec(j)
cont = cont+1;
end
end
end
end
function cont = count_repeats_another_way(Vec)
cont = numel(Vec)-numel(unique(Vec));
end

Walter Roberson
Walter Roberson 2022 年 1 月 20 日
cont =0;
for i=1:length(Vec)-1
for j = i+1:length(Vec)
if Vec(i) == Vec(j)
cont = cont+1
end
end
end
However...
Suppose you had [2,4,4,6,4,2,4] then what output would you want, what would you want cont to be at the end ?

Image Analyst
Image Analyst 2022 年 1 月 20 日
Why use a for loop??? No need to go to that complication (unless there is something you've not told us.) Why not simply use unique() and length()?
if length(unique(v)) == length(v)
fprintf('No repeated values.\n');
else
fprintf('At least one value is repeated.\n');
end

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

タグ

製品


リリース

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by