嵌套的矩阵转置的性质是如何生成和提取的

在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
$scope.testArray = [
{'bedNum': '1', 'bedMsg': 'test1'},
{'bedNum': '2', 'bedMsg': 'test2'},
{'bedNum': '3', 'bedMsg': 'test3'},
{'bedNum': '4', 'bedMsg': 'test4'},
{'bedNum': '5', 'bedMsg': 'test5'},
{'bedNum': '6', 'bedMsg': 'test6'},
{'bedNum': '7', 'bedMsg': 'test7'},
{'bedNum': '8', 'bedMsg': 'test8'},
{'bedNum': '9', 'bedMsg': 'test9'},
{'bedNum': '10', 'bedMsg': 'test10'},
{'bedNum': '11', 'bedMsg': 'test11'},
{'bedNum': '12', 'bedMsg': 'test12'}
$scope._inArray = [];
$scope._outArray=[];
var i = 0;
angular.forEach($scope.testArray, function (data, index) {
if (i & $scope.colsNum) {
$scope._inArray.push(data);
if ($scope.testArray.length == index + 1) {
$scope._outArray.push($scope._inArray);
$scope._outArray.push($scope._inArray);
$scope._inArray = [];
$scope._inArray.push(data);
&!---------------分割线---------------&
比如$scope.colsNum=3,生成一个$scope._outArray=[[5],[5],[2]]这样的数组。
这里是想把$scope.testArray生成一个嵌套的数组,这样也能实现,但觉得自己写的太啰嗦了,希望给一个更好的写法。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
如果用 lodash,很简单,一个函数就搞定
const _ = require("lodash");
const result = _.chunk(data, colsNum);
console.log(result);
lodash 的 _.chunk() 源码
回答完这个问题之后我突然好奇 lodash 是怎么实现的,所以我去翻了下它的源码,其中最关键的一段是
while (index & length) {
result[resIndex++] = baseSlice(array, index, (index += size));
可以看出来,它采用的是 slice 的思想,每次取一段出来放在新数组中。 slice 它调用的 baseSlice() 在 _baseSlice.js 中,对应 _.slice() 方法,,实现的功能和 Array.prototype.slice 一致。
这就有意思了,如果采用这种方式,就有办法使用函数式与法了——见自己写函数的第三个方法。
自己写函数
当然自己写也可以,之前回答某个问题的时候写过,再写一次,用 reduce 再稍加处理。
主要是保持两个数组,一个是结果数组,一个是当前组数组,不需要 i 变量,因为当前组数组的 length 就能取到数量信息。
function groupByCols(data, cols) {
const r = data.reduce((r, t) =& {
r.current.push(t);
if (r.current.length === cols) {
r.list.push(r.current);
r.current = [];
}, { list: [], current: [] });
if (r.current.length) {
r.list.push(r.current);
const result = groupByCols(data, colsNum);
console.log(result);
其实 reduce 用在这里优势不明显,因为有最后一步处理,不能直接返回结果。所以用和你的方法类似的 forEach 改写
function groupByCols2(data, cols) {
const list = [];
let current = [];
data.forEach(t =& {
current.push(t);
if (current.length === cols) {
list.push(current);
current = [];
if (current.length) {
list.push(current);
slice + map 实现
为了函数式写法,可能有些计算不太好理解,先看代码
const result = Array.apply(null, {
length: Math.ceil(data.length / cols)
}).map((x, i) =& {
return data.slice(i * cols, i * cols + cols);
Array.apply 是为了生成一个长度为 Math.ceil(data.length / cols) 的数组,这就是循环次数(Math.ceil() 用于保证有余数则进1)。
然后在循环次数内通过 slice() 分段取出来。
RxJs 用于异步处理数据还是挺方便的,用它的 bufferCount() 解决这种问题
const Rx = require("rxjs");
const out = Rx.Observable.from(data)
.bufferCount(colsNum)
.toArray()
.do(console.log)
.subscribe();
这种方法适合异步或者 callback 处理(上面 console.log 那里传入的你的数据处理函数。
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。时间限制: ms
内存限制:65535 KB
描述有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a&c,b&d或者b&c,a&d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。
输入第一行是一个正正数N(0&N&10),表示测试数据组数,
每组测试数据的第一行是一个正正数n,表示该组测试数据中含有矩形的个数(n&=1000)
随后的n行,每行有两个数a,b(0&a,b&100),表示矩形的长和宽
输出每组测试数据都输出一个数,表示最多符合条件的矩形数目,每组输出占一行
思路:这个题跟导弹拦截差不多, 动归思想(最长递增子序列), 但是又不太一样, 导弹拦截是不能动顺序, 而这道却可以改变顺序, 所以先排下序, 然后再求”最长递增子序列“ , 用ans[i]存储以i元素为终点的最长递增子序列长度, 最后遍历数组求出最长子序列。如下:
1 1 。1 10 。 2 2 。 2 3 。2 4 。 4 5 。5 6 。
#include &iostream&
#include &stdio.h&
#include &string.h&
#include &stdlib.h&
#include &algorithm&
#define MAX 1001
struct Data
}data[MAX];
int ans[MAX];
bool cmp(Data a, Data b)
//排序函数
if(a.x == b.x)
return a.y & b.y;
return a.x & b.x;
int main()
int t, n, i, j, max, tempx,
scanf("%d", &t);
while(t--)
memset(ans, 0, sizeof(ans));
scanf("%d", &n);
for(i = 0; i & i++)
scanf("%d%d", &tempx, &tempy);
if(tempx & tempy)
data[i].x =
//录入时确保x为宽y为长
data[i].y =
data[i].x =
data[i].y =
sort(data, data+n, cmp);
for(i = 0; i & i++)
//初始化为1
ans[i] = 1;
for(i = 1; i & i++)
for(j = i-1; j &= 0; j--)
//寻找最大元素小于data[i]的最长子序列
if(data[i].x & data[j].x && data[i].y & data[j].y
&& ans[j] & max)
max = ans[j];
ans[i] = max + 1;
for(i = 0; i & i++)
if(ans[i] & max)
max = ans[i];
//遍历结果数组找最长子序列(长度)
printf("%d\n", max);
没有更多推荐了,查看: 2570|回复: 10
如何使用数组公式解决多条件嵌套的取数?
阅读权限10
在线时间 小时
请各位老师帮看看如何用数组公式解决符合多条件要求的取数!
该贴已经同步到
23:31 上传
点击文件名下载附件
4.45 KB, 下载次数: 44
阅读权限50
在线时间 小时
=INDEX($H$3:$H$14,(MATCH(A2,{0,60,100,200,120000})*3-3)+MATCH(B2,{0,0.6,0.7,0.8,1})-1)*A2复制代码
阅读权限10
在线时间 小时
取数不对啊!因为这个表的条件是在A列首先满足条件后,再对B列分不同完成比例进行不同金额的奖励!
阅读权限50
在线时间 小时
=INDEX($H$3:$H$14,(MATCH(A2,{0,60,100,200,120000})*3-3)+MATCH(B2,{0,0.6,0.7,0.8,1})-1)*A2*(MATCH(B2,{0,0.6,0.7,0.8,1})&1)复制代码防止有低于0.6完成率的计算错误
阅读权限10
在线时间 小时
呵呵,还是不对!公式中没有体现基础奖励金额数,这个表是:如实有人数达200人以上,任务完成率达80%以上,则按人均100元奖励,如任务完成率只有75%,则按人均95元奖励!
阅读权限50
在线时间 小时
茶树上的蚂蚁 发表于
取数不对啊!因为这个表的条件是在A列首先满足条件后,再对B列分不同完成比例进行不同金额的奖励!
公式算的和你手工查的算的不一样吗?
阅读权限10
在线时间 小时
有的对,有的不对,如第9行、10行,21及22行计算就不对了!
阅读权限10
在线时间 小时
=INDEX($H$3:$H$14,(MATCH(A2,{0,60,100,200})*3-3)+MATCH(B2,{0,0.6,0.7,0.8})-1)*A2*(MATCH(B2,{0,0.6,0.7,0.8})&1)
将你的公式改一下,但对于在类似70%、80%属包含阶段的对应数据还是有点问题!
阅读权限30
在线时间 小时
本帖最后由 topyuyang 于
01:11 编辑
=INDEX(($H$3:$H$5,$H$6:$H$8,$H$9:$H$11,$H$12:$H$14),MATCH(B2,{0.6,0.69,0.79}),,MATCH(A2,{0,60,100,200}))复制代码
阅读权限10
在线时间 小时
综合了两位老师的公式,问题基本解决了,非常感谢两位老师!可是对于完成率有小数点以后的,在查找上会出现个别的差异!还请两位老师再帮帮我!
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师Matlab 如何向矩阵中插入另一个矩阵及创建一个矩阵?_百度知道
Matlab 如何向矩阵中插入另一个矩阵及创建一个矩阵?
1、假设有一个10×10的矩阵A,现在要将5×5的矩阵B插入到A中,规定插入位置为第3行,第2列,Matlab命令应该怎样写??2、创建一个矩阵A,使得它是 B 0
——B是一个已知矩阵,命令又应怎样写?谢谢~~
我有更好的答案
有两种方法完成问题的要求:1.直接对A矩阵进行部分的赋值,使得A中某一部分的值和矩阵B相同A=zeros(10,10);%矩阵AB=ones(5,5);%矩阵BA(1:5,1:5)=B;%2.按照B矩阵的大小,新建A矩阵,将其部分等于B的值B=ones(5,5);%B矩阵[m,n]=size(B);A=zeros(2*m,2*n);A(1:m,1:n)=B;A(1+m:end,1+n:end)=B;
采纳率:56%
来自团队:
1.A=zeros(10,10);%比如说初始的AB=ones(5,5);%初始的BA(3:7,2:6)=B;2.B=ones(5,5);%初始的B[m,n]=size(B);A=zeros(2*m,2*n);A(1:m,1:n)=B;A(1+m:end,1+n:end)=B;
本回答被提问者采纳
为您推荐:
其他类似问题
matlab的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。提取多层嵌套Json数据
在.net 2.0中提取这样的json
{"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}}
引用命名空间
using Newtonsoft.J
using Newtonsoft.Json.L
可以把上面的JSON看成一个对象.你只要写对应的类即可
public class UserInfo
public class address
然后在解析的地方这样写:
string jsonData="{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":guangzhou,\"province\":guangdong}}";
UserInfo user=(UserInfo)JsonConvert.DeserializeObject(jsonData, typeof(UserInfo));
得到City的值只要:user.addr.C
这样实现也行
JObject jsonObj = JObject.Parse(jsonData);
string name=jsonObj ["name"].ToString();
string age=jsonObj ["age"].ToString();
string city=((JObject )jsonObj ["addr"])["city"].ToString();
string province=((JObject )jsonObj ["addr"])["province"].ToString();
如何这个json是动态的呢?譬如让你输入一个json,如{"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}}; 然后让你输入一个对象,如city,然后系统会输出guangzhou这个值,那这样的话,json就是动态生成的了,我想了解有没有读取这样的json的方法。(注意,json是多级嵌套的。)
public string GetJsonValue(JEnumerable&JToken& jToken,string key)
IEnumerator enumerator = jToken.GetEnumerator();
while (enumerator.MoveNext())
JToken jc = (JToken)enumerator.C
if (jc is JObject||((JProperty)jc).Value is JObject)
return GetJsonValue(jc.Children(), key);
if (((JProperty)jc).Name == key)
return ((JProperty)jc).Value.ToString();
在调用的时候:
string jsonData = "{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":\"guangzhou\",\"province\":\"guangdong\"}}";
JObject jsonObj = JObject.Parse(jsonData);
Response.Write(GetJsonValue(jsonObj.Children(), "province"));
如果有多层嵌套的数组
jsonData = "{\"addr\":[{\"city\":\"guangzhou\",\"province\":\"guangdong\"},{\"city\":\"guiyang\",\"province\":\"guizhou\"}]}";
jsonObj = JObject.Parse(jsonData);
jar = JArray.Parse(jsonObj["addr"].ToString());
j = JObject.Parse(jar[0].ToString());
Response.Write(j["city"]);
string xmlstr=((XmlDocument)JsonConvert.DeserializeXmlNode(jsonData)).InnerXml.ToString();
没有更多推荐了,

我要回帖

更多关于 矩阵嵌套 的文章

 

随机推荐