Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lotus notes Lotusscript排序3文本列表。文本列表2&;3将遵循文本列表1的排序_Lotus Notes_Lotusscript - Fatal编程技术网

Lotus notes Lotusscript排序3文本列表。文本列表2&;3将遵循文本列表1的排序

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的元素转移到各自的第二个临时数组中时,比较

在我的文档中,我有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的元素转移到各自的第二个临时数组中时,比较文本列表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
然后,您可以在Evaluate的帮助下连接列表、排序并将其写回字段:

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
然后,您可以在Evaluate的帮助下连接列表、排序并将其写回字段:

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将是(约翰·韦恩、西蒙·安德森、约翰·史密斯、,