sun1993 发表于 2009-9-27 13:47

如何才能让数组元素的值随位置而变化?

想实现的功能是,A=[1 2 3 4 5 6 7 8 9 10 ...]
当去掉 5和8 后,6 7的位置自动往前移了一位,同时希望它们的值相应的减小1
9 10 ...的位置向前移了两位,同时值也减小2
大体想实现这样的想法
如果一个个扫描判断过去,我受不了
该怎样实现呢?大家有啥想法?
谢谢!

ChaChing 发表于 2009-9-27 16:22

a=; b=; =ismember(b,a); ii=sort(ii);
if sum(cc)~=length(b), error('sth is error !'); end
for j=1:length(ii)-1, pp=ii(j)+1:ii(j+1); a(pp)=a(pp)-j; end
if ii(end)~=length(a), j=j+1; pp=ii(j)+1:length(a); a(pp)=a(pp)-j; end
a(ii)=[]; a

sun1993 发表于 2009-9-27 19:24

回复 沙发 ChaChing 的帖子

谢谢,我慢慢消化先

sun1993 发表于 2009-9-27 22:44

回复 沙发 ChaChing 的帖子

看明白了,但如果先删掉不要的元素,并且是个二维数组的情况呢
比如 a=[1 2 6 0
      2 1 3 0
      3 2 4 8
      4 3 0 0
      6 1 7 0
      7 6 8 12
      ...]
这里 5 已经被删掉了,怎样使所有位置的6 7 8 ...都相应的变成5 6 7 ...呢?
先用上面的方法试一下,可我还是想有没有更方便的方法呢

[ 本帖最后由 sun1993 于 2009-9-27 22:51 编辑 ]

ChaChing 发表于 2009-9-27 22:56

回复 地板 sun1993 的帖子

不太明白LZ的问题!?

sun1993 发表于 2009-9-27 23:35

回复 5楼 ChaChing 的帖子

我先把不要的元素,比如5,用其它方法都删掉了,
剩下的所有位置的6怎么变成5,7变成6
也就是说,一个位置上的6变成了5,怎么做到同时其它位置上的6也变成5

ChaChing 发表于 2009-9-28 00:38

不确定是否LZ要的!?
还有有点好奇LZ的原始工程目的!?

a=;
a(find(a==6))=nan; ii=find(a>6); a(ii)=a(ii)-1

[ 本帖最后由 ChaChing 于 2009-9-28 00:43 编辑 ]

sun1993 发表于 2009-9-28 11:44

想到了一个方法,谢谢ChaChing提示,
可能要写很多行,SIGH,我总想一行搞定

heizaoniangao 发表于 2009-9-28 16:45

回复 沙发 ChaChing 的帖子

ChaChing的程序好强大,学习了一下,像sort以前都没用过。。。
个人觉得第三行的: pp=ii(j)+1:ii(j+1);是不是改成:pp=ii(j)+1:ii(j+1)-1;比较好?不过结果是一样的,呵呵

ChaChing 发表于 2009-9-29 08:37

回复 9楼 heizaoniangao 的帖子

个人并非高手, 刚好以前用过而已!
没错pp=ii(j)+1:ii(j+1);改成pp=ii(j)+1:ii(j+1)-1;比较好
页: [1]
查看完整版本: 如何才能让数组元素的值随位置而变化?