Lotus notes Lotusscript排序3文本列表。文本列表2&;3将遵循文本列表1的排序
在我的文档中,我有3个文本列表字段。我可以对第一个文本列表进行升序排序。但是如何使文本列表2和3遵循文本列表1的最终排序?如下所示: 排序前: 文本列表1(C,A,D,B),文本列表2(W,X,Y,Z),文本列表3(L,I,S,T) 排序后(我希望它如下所示): 文本列表1(A、B、C、D),文本列表2(X、Z、W、Y),文本列表3(I、T、L、S)Lotus notes Lotusscript排序3文本列表。文本列表2&;3将遵循文本列表1的排序,lotus-notes,lotusscript,Lotus Notes,Lotusscript,在我的文档中,我有3个文本列表字段。我可以对第一个文本列表进行升序排序。但是如何使文本列表2和3遵循文本列表1的最终排序?如下所示: 排序前: 文本列表1(C,A,D,B),文本列表2(W,X,Y,Z),文本列表3(L,I,S,T) 排序后(我希望它如下所示): 文本列表1(A、B、C、D),文本列表2(X、Z、W、Y),文本列表3(I、T、L、S) 有没有办法做到这一点?我尝试将每个文本列表放入数组中,但在跟踪临时变量中的索引并使用索引将文本列表2和3的元素转移到各自的第二个临时数组中时,比较
有没有办法做到这一点?我尝试将每个文本列表放入数组中,但在跟踪临时变量中的索引并使用索引将文本列表2和3的元素转移到各自的第二个临时数组中时,比较文本列表1中的哪个元素应该首先出现对我来说太难了。当然有LotusScript有很多排序算法。但是,使用evaluate语句可以轻松解决您的问题:
Dim doc as NotesDocument
'- somehow set the doc
Dim varResult as Variant
varResult = Evaluate({@Sort(Fieldlist1) : @Sort(Fieldlist2) : @Sort(Fieldlist3)}, doc)
如果您不想使用evaluate,可以实现您选择的排序算法,并执行以下操作:
Dim varResult as Variant
VarResult = YourSortFunction(doc.Fieldlist1)
VarResult = ArrayAppend( VarResult,YourSortFunction(doc.Fieldlist2) )
VarResult = ArrayAppend( VarResult,YourSortFunction(doc.Fieldlist3) )
当然,LotusScript有很多排序算法。但是,使用evaluate语句可以轻松解决您的问题:
Dim doc as NotesDocument
'- somehow set the doc
Dim varResult as Variant
varResult = Evaluate({@Sort(Fieldlist1) : @Sort(Fieldlist2) : @Sort(Fieldlist3)}, doc)
如果您不想使用evaluate,可以实现您选择的排序算法,并执行以下操作:
Dim varResult as Variant
VarResult = YourSortFunction(doc.Fieldlist1)
VarResult = ArrayAppend( VarResult,YourSortFunction(doc.Fieldlist2) )
VarResult = ArrayAppend( VarResult,YourSortFunction(doc.Fieldlist3) )
我将创建一个自定义类:
public class TripleText
private v1 as string
private v2 as string
private v3 as string
sub new(s1 as string, s2 as string, s3 as string)
v1 = s1
v2 = s2
v3 = s3
end sub
property get value1 as string
value1 = v1
end property
property get value2 as string
value2 = v2
end property
property get value3 as string
value3 = v3
end property
end class
然后我将创建一个数组:
dim sortMe(4) as TripleText
填充它:
dim text1 as variant
dim text2 as variant
dim text3 as variant
text1 = doc.getItemValue("textList1")
text2 = doc.getItemValue("textList2")
text3 = doc.getItemValue("textList3")
for i = 0 to 4
sortMe(i) = new TripleText(text1(i),text2(i),text3(i))
next
现在您所要做的就是对SortMe数组进行排序。您可以在LotusScript中找到一个示例QuickSort实现,在重写它以适应TripleText后,您只需调用它:
dim排序(4)为TripleText
排序=快速排序(排序)
链接的快速排序实现对字符串数组进行排序,并且您有一个TripleText数组。这就是为什么我说会有一些重写来适应它,但是修改代码很容易,这样它就可以接受一个TripleText数组,并根据value1属性对其进行排序。也就是说,我不打算为您重写所有代码,但关键是不要像这样进行比较:
If sA(i) < PivotValue Then
If TT(i).value1 < PivotValue Then
我将创建一个自定义类:
public class TripleText
private v1 as string
private v2 as string
private v3 as string
sub new(s1 as string, s2 as string, s3 as string)
v1 = s1
v2 = s2
v3 = s3
end sub
property get value1 as string
value1 = v1
end property
property get value2 as string
value2 = v2
end property
property get value3 as string
value3 = v3
end property
end class
然后我将创建一个数组:
dim sortMe(4) as TripleText
填充它:
dim text1 as variant
dim text2 as variant
dim text3 as variant
text1 = doc.getItemValue("textList1")
text2 = doc.getItemValue("textList2")
text3 = doc.getItemValue("textList3")
for i = 0 to 4
sortMe(i) = new TripleText(text1(i),text2(i),text3(i))
next
现在您所要做的就是对SortMe数组进行排序。您可以在LotusScript中找到一个示例QuickSort实现,在重写它以适应TripleText后,您只需调用它:
dim排序(4)为TripleText
排序=快速排序(排序)
链接的快速排序实现对字符串数组进行排序,并且您有一个TripleText数组。这就是为什么我说会有一些重写来适应它,但是修改代码很容易,这样它就可以接受一个TripleText数组,并根据value1属性对其进行排序。也就是说,我不打算为您重写所有代码,但关键是不要像这样进行比较:
If sA(i) < PivotValue Then
If TT(i).value1 < PivotValue Then
假设你有
- 文档中的三个字段List1、List2和List3
- 它们具有相同数量的列表元素
- 他们不会在一起超过64K
vResult=Evaluate(|
_分隔符:=“#”;
_ListAll:=@Sort(List1+\u分隔符+List2+\u分隔符+List3);
字段List1:=@Word(_ListAll;_分隔符;1);
字段List2:=@Word(_ListAll;_分隔符;2);
字段List3:=@Word(_ListAll;_分隔符;3);
“”,doc)
选择一个不会出现在列表中的分隔符。假设您有
- 文档中的三个字段List1、List2和List3
- 它们具有相同数量的列表元素
- 他们不会在一起超过64K
vResult=Evaluate(|
_分隔符:=“#”;
_ListAll:=@Sort(List1+\u分隔符+List2+\u分隔符+List3);
字段List1:=@Word(_ListAll;_分隔符;1);
字段List2:=@Word(_ListAll;_分隔符;2);
字段List3:=@Word(_ListAll;_分隔符;3);
“”,doc)
选择一个不会出现在列表中的分隔符。如果我使用您提供的求值代码,它会自动修改背景值吗?(doc.Replaceitemvalue?)varResult引用了哪个结果字段列表?我假设varResult只具有排序字段列表1的值,但我是否仍需要执行doc.Replaceitemvalue(“Fieldlist1”,varResult)?也许我需要重新澄清我的要求,文本列表2和3可能不一定像我给出的示例那样。它可能是任何我们仅仅通过观察无法轻松分类的东西。它可以是文本列表2的名字,比如(约翰·史密斯、约翰·韦恩、肖恩·迈克尔、西蒙·安德森)。这意味着最初约翰·史密斯和文本列表中的1“C”有关,约翰·韦恩是“A”等等。最后文本列表2将是(John Wayne、Simon Anderson、John Smith、Sean Michael)。可能更熟悉的是Microsoft Excel中的列排序,其中会询问您是否将排序扩展到其他列。如果我使用您提供的求值代码,它会自动修改后台的值吗?(doc.Replaceitemvalue?)varResult引用了哪个结果字段列表?我假设varResult只具有排序字段列表1的值,但我是否仍需要执行doc.Replaceitemvalue(“Fieldlist1”,varResult)?也许我需要重新澄清我的要求,文本列表2和3可能不一定像我给出的示例那样。它可能是任何我们仅仅通过观察无法轻松分类的东西。它可以是文本列表2的名字,比如(约翰·史密斯、约翰·韦恩、肖恩·迈克尔、西蒙·安德森)。这意味着最初约翰·史密斯和文本列表中的1“C”有关,约翰·韦恩是“A”等等。最后文本列表2将是(约翰·韦恩、西蒙·安德森、约翰·史密斯、,