我正在开发一种用于对包含0或1的表进行排序的技术,例如:
Meteor.templateName.helpers
目标是计算每列的总数并对表进行排序: I.基于每列总量的降序。 II。覆盖。例如,在第1行中,第3行为0.我们必须找到第3列中第1列中的1并重新排序列。换句话说,1代表覆盖范围,我们必须确保覆盖前几列中的所有内容。
我设法获得每列的总数,如下所示:
{{1, 1, 0, 1, 1, 1, 1, 1},
{1, 1, 0, 0, 0, 0, 1, 0},
{1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 0, 0, 0, 1, 0},
{1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 1, 0, 1},
{1, 1, 1, 1, 1, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 0, 1},
{0, 0, 0, 1, 0, 1, 0, 1},
{1, 1, 1, 1, 1, 0, 0, 0},
{1, 1, 1, 1, 1, 0, 0, 0}}
现在的问题是我无法根据TC_Sum中的列号对原始数组(TC_Detect)进行排序。
因此,我想对表进行重新排序,因此如果列为0,则下一列为1.
上述示例的预期输出如下:
For (i=0; i<m; i++)
For (j=0; j< TS.Size(); j++)
if (tc.detected()==1)
TS_Detect[j][i]= 1
else
TS_Detect[j][i]= 0
TC_Sum=(2, TS.Size())
For (k=0; k<TS.Size(); k++)
TC_Sum(0, k)=k
For (l=0; l< m; l++)
Flag=TS_Detect[l][k]
If (flag == 1)
TC_Sum(1, k)= TC_Sum(1, k)+1
int temp
For (g=0; g<TC_Sum.length-1; g++)
For (b=1; b< TC_Sum.length-1; b++)
If (TC_Sum[b-1]< TC_Sum[b])
temp= TC_Sum[b-1]
TC_Sum[b-1]= TC_Sum[b]
TC_Sum[b]= temp
return TC_Sum
请提出任何建议。
答案 0 :(得分:0)
我不确定您使用的语言是什么,但我认为我的回答非常广泛。
我假设您有一个列表列表,我们称之为A
。
A = [ [0,1,0,0] , [1,0,1,1] , [0,0,0,0] ]
您已使用上面的计数算法制作另一个列表,将其称为S
以获取总和。
S = [ 3 , 1 , 0 ]
您现在想要根据A
的值S
进行排序。
为方便起见,让我们定义第三个列表,我们将其称为{{1>} 索引。
I
I = [ 0 , 1 , 2 ]
会一直持续到I
,具体取决于列表中的元素数量
您现在需要的是一种排序功能,允许您根据键进行排序。这样的排序函数通常会将您想要排序的东西与用于比较两个项目的函数一起排序。
在这种情况下,请排序3,4,5,6,...
。然后sort函数传递索引。根据{{1}}中的值比较这些指数。结果是列表I
,其中包含根据S
排序的索引。您现在可以根据I*
重新排序S
。
我不确定您使用的是哪种语言,但以下Python代码可以实现此目的:
A
请注意,比较函数会返回I*
,def MyComparison(i,j):
return S[j]-S[i]
A = [ [0,1,0,0] , [1,0,1,1], [0,0,0,0] ]
S = [ 1 , 3 , 0 ]
I = [ 0 , 1 , 2 ]
Istar = sorted(I, cmp=MyComparison)
#The above returns: [2, 0, 1]. If this is the wrong order, reverse the result.
[A[x] for x in Istar]
#The above returns: [[1, 0, 1, 1], [0, 1, 0, 0], [0, 0, 0, 0]]
或-1
,具体取决于所比较项目的相对排名。