声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1491|回复: 9

[编程技巧] 如何才能让数组元素的值随位置而变化?

[复制链接]
发表于 2009-9-27 13:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

使用道具 举报

发表于 2009-9-27 16:22 | 显示全部楼层
a=[21:40]; b=[25,32,28,38]; [cc,ii]=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

评分

1

查看全部评分

 楼主| 发表于 2009-9-27 19:24 | 显示全部楼层

回复 沙发 ChaChing 的帖子

谢谢,我慢慢消化先
 楼主| 发表于 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 编辑 ]
发表于 2009-9-27 22:56 | 显示全部楼层

回复 地板 sun1993 的帖子

不太明白LZ的问题!?
 楼主| 发表于 2009-9-27 23:35 | 显示全部楼层

回复 5楼 ChaChing 的帖子

我先把不要的元素,比如5,用其它方法都删掉了,
剩下的所有位置的6怎么变成5,7变成6
也就是说,一个位置上的6变成了5,怎么做到同时其它位置上的6也变成5
发表于 2009-9-28 00:38 | 显示全部楼层
不确定是否LZ要的!?
还有有点好奇LZ的原始工程目的!?

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];
a(find(a==6))=nan; ii=find(a>6); a(ii)=a(ii)-1

[ 本帖最后由 ChaChing 于 2009-9-28 00:43 编辑 ]
 楼主| 发表于 2009-9-28 11:44 | 显示全部楼层
想到了一个方法,谢谢ChaChing提示,
可能要写很多行,SIGH,我总想一行搞定
发表于 2009-9-28 16:45 | 显示全部楼层

回复 沙发 ChaChing 的帖子

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

评分

1

查看全部评分

发表于 2009-9-29 08:37 | 显示全部楼层

回复 9楼 heizaoniangao 的帖子

个人并非高手, 刚好以前用过而已!
没错pp=ii(j)+1:ii(j+1);改成pp=ii(j)+1:ii(j+1)-1;比较好
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 21:38 , Processed in 0.057130 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表