What is the difference between string arrays and cell arrays of character vectors?

74 ビュー (過去 30 日間)
R2016b allows you to create string arrays, and R2017A allows you to use the double-quote syntax for specifying string literals. What is the practical difference between a string array (e.g ["one", "two"]) and a cell array of character vectors (e.g. {'one', 'two'}). Aside from minor conveniences like "strlength" (which could easily have been implemented to operate on cell arrays of character vectors), why should I care about this? Am I missing something?
  3 件のコメント
Chris Volpe
Chris Volpe 2017 年 4 月 25 日
Yes, but even without adding a new data type, a new function could have been added to the base language to perform that search over the cell array, hiding the cellfun call, and giving the same external appearance, no? I'm trying to think of a case where the desired usage/programming paradigm couldn't be achieved via functions and thus necessitated a new data type.
Walter Roberson
Walter Roberson 2017 年 4 月 25 日
Is there any non-numeric data structure that could not be implemented as a struct and then adding functions to the language ?

サインインしてコメントする。

採用された回答

Jurgen vL
Jurgen vL 2019 年 5 月 20 日
編集済み: Jurgen vL 2019 年 5 月 21 日
I'd like to add that for loops can become cleaner, instead of cellarray{idx} you can use idx directly. E.g. when displaying messages or iterating over struct fields.
for field = string(fieldnames(S)')
S.(field) = somevalue;
end
% I haven't figured out why this only works with horizontal arrays
In addition, cellfun typically requires the annoying argument 'UniformOutput' flag to be false when a function returns a character array. If a function that returns a char array is changed to return a scalar string this would clean things up too, e.g.:
[~, patientID] = cellfun(@fileparts,{cohort.pfolder})
%no need for UniformOutput if fileparts() is modernized to return strings.
  3 件のコメント
Rik
Rik 2019 年 5 月 20 日
I vaguely remember a question a year (or two?) ago where this quirk was actually helpful (by allowing rows of the object array to be processed). If I recall correctly that was in the context of parfor. I can't find it in the parfor doc, but I seem to recall parfor doesn't process your array of objects the same as for. I don't have the parallel computing toolbox, so I can only test the fallback implementation of parfor.
</ramble>
Walter Roberson
Walter Roberson 2019 年 5 月 23 日
I have occasionally made use of the fact that for processes by columns. It seldom provides additional clarity, though.
What I have sometimes wanted is to loop over cell entries without having to do a specific de-reference.

サインインしてコメントする。

その他の回答 (2 件)

Steven Lord
Steven Lord 2017 年 4 月 25 日
You may find today's post from Loren's blog interesting and informative. If you have questions or feedback, as Dave wrote, "Expect to hear more from me on this topic. And please share your input with us by leaving a comment below. We're interested to hear from you."

Walter Roberson
Walter Roberson 2017 年 4 月 25 日
Students keep trying to use == to compare strings, and keep trying to use () to store strings. Making MATLAB easier for students is a practical difference.
Now as to whether it is faster or whether there are additional meaningful features... those are different questions ;-)
  1 件のコメント
dpb
dpb 2017 年 4 月 25 日
編集済み: dpb 2017 年 4 月 25 日
What about the search issue--are strfind and friends now string aware? If so, that would be a_good_thing (tm).
From the blog Steven L reference, it appears "not yet". I'd echo the sentiments of another poster there that it would be better to hold off the introduction of these new features until they're really "ready for prime time" instead of just interesting little tidbits stuck on like the candy commercial...
How are strings displayed -- do they have a double-quote around them a la the single for cell strings to differentiate their appearance?
This is a 'yes' it seems...makes sense; presumed so but curious.

サインインしてコメントする。

カテゴリ

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

製品

Community Treasure Hunt

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

Start Hunting!

Translated by