申し訳ありませんが、コード化されたソリューションを提供するつもりはありません。具体的な問題が発生した場合は、コーディングを開始できるようにするために使用するプロセスを詳しく説明します。質問を投稿してください
nchoosek
セル配列のすべての順列の配列を生成するために使用するC
ので、
nCells = length(C);
nPerms = nchoosek(1:nCells,2);
その後、intersect を使用してすべての順列をループし、共通の文字列があるかどうかを確認できます。
result(i) = intersect(C{nPerms(i,1)},C{nPerms(i,2)});
これにより、すべての共通文字列をリストする配列が得られ、nPerms 配列を使用すると、共通文字列を含む 2 つの行が得られます。ただし、これを実行しようとするとintersect
、各セル配列に同じ数の要素が含まれているため失敗します。
したがって、ループの前に、C の各要素が同じ長さになるように、空白のセルで埋められた一時的なセル配列を作成します。
これは、各セルの要素数 (@numel) を計算し、続いて最大値を計算することによって、配列 C の最長セルを計算します。
cSize = cellfun(@numel,C);
maxSize = max(cSize);
次に、空白セルを埋める関数を定義できます
fcn = @(x) [x cell(1,maxSize - numel(x))];
paddedC = cellfun(fcn,C,'UniformOutput',false);
これにより、各セルに同じ数の要素を持つセル配列が得られます。次に、この cell 配列をループで使用して、各順列をテストできます。
誰かが 1 行の cellfun ソリューションを提示することは間違いありませんが、これで十分に開始できることを願っています。