Apr 18, 2008

2008-04 UCDChina 南京书友会:排序

    排序,是大家常见的功能,无论在文件系统中、在网络商城中、在数据表格中,按照类型排序,按照时间排序,按照价格排序,还有自由排序,等等。

    排序,就是把一个集合中的对象,按照属性来进行划分,然后按照一定的顺序进行排列。表格,是大家最常见的加以排序功能的载体。如淘宝的商品列表,按照价格高低、卖家所在地、信用等级排序。Excel、财务管理等数据处理软件,按照数据大小排序。详细信息视图下的文件系统,按照文件大小、文件类型、修改时间排序。如果不是详细信息视图,而是平铺、缩略等视图,那也是以大小、时间、类型属性为标准来进行排序,只是这些属性在视图上是隐藏的。

    那为什么要排序呢?大体来看有两个目的。第一点,很显然,排序就是比较,比较就是为了选出目标对象。第二点,就是把集合中的对象按照一定的有序方式输出,得要一个有序的结果。那要这个有序的结果干什么呢?也是给别人看的,也是为了让别人能方便快捷的寻找到有用的目标对象。这样看来,第二点和第一点的最终目标是一致的:用户的直接目标是寻找和选择自己想要的对象。排序是辅助用户达到这个目标的有效手段。很显然,电脑要比人工强大的多,所以集合中的对象越多,排序的作用就越大和越明显。

    那怎么排序?或者说排序的标准是什么?当然,这里不会讨论程序和数据结构。前面说了,排序就是按照对象的属性来进行划分,那么属性就是排序的标准。一个集合中的对象,都有共同的属性。理论上来说,有多少属性,就有多少种排序方式。以文件系统为例,文件的属性有大小、类型、修改时间、创建时间等。再看mp3歌曲的属性,有艺术家、唱片标题、发行年、曲目号码、流派、歌词、来源、音频持续时间、位速、频道、音频采样级别等等。每一种属性都可以用来排序,那是不是太多了?是的,如果所有的属性都按照列表的方式排列开来,那太夸张了。所以,大部分属性是隐藏的,也不提供对这些属性的排序功能。一般只提供基本属性的排序,就如详细视图下的文件列表。

    哪些是基本属性呢?这个就要看目标用户了,对目标用户有用的属性就是基本属性。以mp3来说,我们将用户划分为三类。第一类,只管听,不管这歌是谁唱的,什么时候出的专辑,不管是港台的、大陆的还是英伦的,好听就行。第二类,除了听,还有高一层次需求的,要听××歌手的,要听××年代的,要听××风格的。第三类,更有追求了,是玩音乐的,除了上面两类的要求,还要知道音频采样、频道、位速等等专业的东西。按照cooper对用户的划分,可以分为初、中、高级用户。中间用户永远是占大多数的,所以中间用户的需求,放到排序这里,他们所需求的属性,就是软件、网站、信息系统所提供的排序方式。看看文件系统,确实是那么几项。初级用户虽然暂时用不到按这些属性来排序,但初级用户会成长为中间用户,到时候会用到。而高级用户,那些玩音乐的,真实太少了。那也只有他们在玩音乐的时候才用到那些属性来排序,而当他们听音乐的时候,也就和中间用户,甚至初级用户一样。所以,按照目标用户,以中间用户的需求选择属性,来做为基本的排序方式,对于初级用户,提供基本视图,隐藏或简化排序功能,对于高级用户,提供高级视图,提供更全面的排序方式。

    下面扩展一下对象的属性。除了那些固有属性,还有没有其他动态的属性、变化的属性?有,比如说频率。按照某个对象的使用频率、点击频率来作为排序的对象。在网上商城的一个典型例子就是按照关注程度来排序,按照商品的好评程度来排序,还有大家常见的Tag,也是按频率来排序的。这个机制和搜索引擎有些类似的地方,在网上商城很常见,那在文件系统中是否也引进一下呢?再扩展一下,不但属性是动态的,对象也是动态的。就比如歌曲排行,新歌在不断的加入,而歌曲的点击率也在不断变化,排行榜要实时显示。这个应该是技术上的问题了。

    再扩展一下,属性的格式化和标准化。常见的排序属性,基本都是以关键字排序,也就是把属性字符化,然后对符号进行排序。是否可以避开这个过程,直接对属性进行比较呢?举个例子,本命年,要买红色的东西。我想看看有哪些红色的东西。怎样按颜色来排序?按颜色排序,那就要按颜色的标准码来。但标准码怎么来呢?卖家贴出商品的时候填上颜色码?不好弄。系统自动识别?有难度。所以,按颜色来排序,就不大好实现。如果所有的属性都以二进制流的方式来识别,那将来可排序的属性可能会更多。再来看标准化,比如按照尺寸排序,卖家张三填的是长×宽×高,而卖家李四填的是长×高×宽,那排序后用户做出的选择必然会有差错。属性没有标准,那错误就必然发生。所以对象属性的格式化和标准化是排序的重要方面。

    在有了标准和格式的情况下,那排序的方式有哪些呢?手动?自动?自动排序,我们可以理解为默认排序,也就是以一个基本属性为标准,上面说的按照频率等来自动化的排序也是这样。这个很容易理解。手动,那就是用户自己选择一个属性作为标准。也很容易理解。扩展一下,用户不想以那些属性来排序,用户就要自己来排。这种排序比较常见的就是文件系统,用户可以把文件图标随意排放。还有就是blog里大家对友情链接的排序,对文章分类的排序。Wordpress里有专门的插件,可以通过拖拽来排序。Blogbus里用的是让用户输入数字来排序。这些都代表了自由排序。

    再扩展一下,现在常见的排序都是一维的,也就是按照一个属性来排序,能否按照两个、三个甚至更多属性来同时排序呢?那就需要二维、三维和多维空间。举个二维的例子,按照物品的生产时间和重量这两个属性来排序,那就要画出一个二维坐标,X轴,Y轴,物品在这个二维的坐标中以点的方式来呈现。三维的也可以这样。当然维数越多,技术上越困难,并且也不利于用户做出选择了。

    下面来看一看一些常见的产品,看看它们和排序的关系。

    先来看手机通讯录。我的手机是S40系统。S40系统的通讯录排序,是按照姓名,按照数字和字母顺序来的。我常常遇到这样的情况,我要发同一条信息给几个人。第一个人,我可以通过查找调出他的名字。而第二个、第三个人,我查找不起来了,只能按顺序在通讯录里去一个一个往下按。而S60做的比较好,可以查找后选中checkbox,然后继续查找,再选中。那能否按照联系频率来给通讯录排序呢?S40中有一个“最近常用联系人”,但也只有15个,而且是常通话的联系人,不是常短信的联系人。对于按字母排序,能否按字母块再多一级上级排序呢?比如我要找G开头的一个人的名字,能否让我直接跳到G开头呢?而不是仍然要从A到G按顺序这么一个一个按下去。

    再来看手机九宫格菜单。S40和S60都无法排序。每次进入S40的九宫格,都是默认选中的多媒体文件夹,如果我要发信息,那要按一下左,再按一下上,这就多了两次按键操作。按照我的想法,九宫格菜单应该和桌面电脑的图标一样,可以自由排序,或者按照使用频率排序,而不是固定格式。iPhone我没用过,我想应该可以。

    来看看IM。QQ、MSN、GTalk、百度Hi,都是只有默认按照名字来排序,好像没有其他排序方式。QQ有个最近联系人,但不清楚它的排序方式是什么。如果你的IM里联系人很多,而你要找一个人,给他发个消息,而你又记不得他的IM号码,也记不得他的昵称,那就老老实实的去按顺序找吧。如果给IM软件加上自由排序,或者加上按照联系频率等排序方式,是否更好用呢?

    看看网络相册,Flick和又拍,就有比较好的自由排序机制。而windows live spaces的相册,只能按照创建和上传的默认时间排列。

    还有输入法。智能ABC,估计大家都不用了吧,其实一点都不智能。字是固定的排列,每次都要翻着找。Google输入法就智能了,按照使用频率自动往前排。

    大家可以看看Silverlight的宣传片,从里面可以看出一些排序的应用。

    总结一下,排序,三个要素:集合、对象、属性。然后在这三个属性中变幻吧。当然,前提是,要对用户有用。

No comments:

Post a Comment