Sorting 在经典ASP中对集合进行排序

Sorting 在经典ASP中对集合进行排序,sorting,asp-classic,Sorting,Asp Classic,这是一个非常简单的问题-如何对集合进行排序 我有一个CSV文件,其中的行以随机顺序排列。我想根据一列中的日期对行进行排序。是否将行添加到记录集中?我可以用脚本字典排序吗 显然,我已经被.NET和Linq宠坏了,现在我发现自己回到了经典asp的国度,意识到我7年前肯定知道这一点,并且非常想念泛型。我觉得自己就像一个完整的n00b。对我来说也太长时间了。IIRC你没有现成的选择 如果我是你,我会把所有数据放在一个数组中,然后对数组进行排序。我在这里找到了一个快速排序实现:还可以看看“气泡排序”,它与

这是一个非常简单的问题-如何对集合进行排序

我有一个CSV文件,其中的行以随机顺序排列。我想根据一列中的日期对行进行排序。是否将行添加到记录集中?我可以用脚本字典排序吗


显然,我已经被.NET和Linq宠坏了,现在我发现自己回到了经典asp的国度,意识到我7年前肯定知道这一点,并且非常想念泛型。我觉得自己就像一个完整的n00b。

对我来说也太长时间了。IIRC你没有现成的选择

如果我是你,我会把所有数据放在一个数组中,然后对数组进行排序。我在这里找到了一个快速排序实现:

还可以看看“气泡排序”,它与那些经典的asp标记云非常配合


我会选择记录集方法。使用文本驱动程序。您需要更改连接字符串中的目录和select语句中的文件名。扩展属性“HDR=Yes”指定CSV中有一个标题行,我建议这样做,因为这样可以更轻松地编写psuedo SQL

<%

Dim strConnection, conn, rs, strSQL

strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\inetpub\wwwroot\;Extended Properties='text;HDR=Yes;FMT=Delimited';"

Set conn = Server.CreateObject("ADODB.Connection")
conn.Open strConnection

Set rs = Server.CreateObject("ADODB.recordset")
strSQL = "SELECT * FROM test.csv order by date desc"
rs.open strSQL, conn, 3,3

WHILE NOT rs.EOF
    Response.Write(rs("date") & "<br/>") 
    rs.MoveNext
WEND

rs.Close
Set rs = Nothing

conn.Close
Set conn = Nothing

%>

在这种情况下,我会从big brother.net获得帮助。可以在ASP应用程序中使用System.Collections.Sortedlist,并对键值对进行排序

set list = server.createObject("System.Collections.Sortedlist")
with list
  .add "something", "YY"
  .add "something else", "XX"
end with

for i = 0 to list.count - 1
    response.write(list.getKey(i) & " = " & list.getByIndex(i))
next
顺便说一句,如果以下.net类也可用:

  • System.Collections.Queue
  • System.Collections.Stack
  • System.Collections.ArrayList
  • System.Collections.SortedList
  • System.Collections.Hashtable
  • System.IO.StringWriter
  • System.IO.MemoryStream

另请参见:

对这一问题的迟来的回答,但仍然有价值

我正在处理小型收藏,因此我能够负担得起每次将物品插入正确位置的方法,有效地在每次添加时重建收藏

VBScript类如下所示:

”简单的集合管理器类。
'执行添加/设置集合项的操作。
'在这里进行填充,以便将职责从集合类中委派出去。
类clsCollectionManager
公共子人群集合项(集合、标记、值)
如果collection.Exists(strKey),则
如果(VarType(Value)=vbObject),则
设置集合项(strKey)=值
其他的
集合项目(strKey)=值
如果结束
其他的
呼叫收集。添加(strKey,Value)
如果结束
端接头
'将一个集合和一个新元素作为输入参数,一个新的集合将吐出一个全新的集合
'将新项目按顺序插入正确位置
'这是基于它接收的集合已经订购的假设
'(如果我们总是使用此方法填充项目,则应该是这种情况)
'这会改变传递的集合,因此我们通过将其标记为byref来突出显示它
'(这不是严格必需的,因为对象无论如何都是通过引用传递的)
Public Sub-AddCollectionItemInOrder(byref existingCollection,strNewKey,Value)
Dim orderedCollection:Set orderedCollection=Server.CreateObject(“Scripting.Dictionary”)
暗键
'如果我们的记录集中已经有一些内容,那么我们需要按顺序添加它。
'VBScript中没有可用于集合(或数组)的排序。因此,我们必须自己去做。
'首先,迭代当前集合中的所有内容。我们必须假设它本身是经过排序的。
对于现有集合中的每个strExistingKey
'如果新项目不存在且发生在当前项目之后,则立即将新项目添加到中
(在添加到当前项之前。)
如果(非orderedCollection.Exists(strNewKey))和(strExistingKey>strNewKey),则
调用PopulateCollectionItem(orderedCollection、strNewKey、Value)
如果结束
调用PopulateCollectionItem(orderedCollection、strExistingKey、existingCollection.item(strExistingKey))
下一个
最后检查一下它是否仍然不存在。
如果最后一个地方放在最后一个地方,或者原始收藏是空的,就不会有了
如果(不是orderedCollection.Exists(strNewKey)),则
调用PopulateCollectionItem(orderedCollection、strNewKey、Value)
如果结束
设置existingCollection=orderedCollection
端接头
末级

我应该想到这一点……一个关于记忆的游戏。感谢您完全脱离主题,但我的livejournal中有一个与userpic相同的图标。:)我在网上的某个地方找到了它,所以我认为很有可能其他人也在使用它:)抱歉,语法高亮显示时代码看起来有点笨拙。您可以使用(特别是,
lang vb
)使高亮显示正常工作。仅供参考,列表会自动按键排序,无法按值对列表排序。网站现在处于脱机状态,但仍可以在此处查看: