数组管理

数组管理   
 
  数组共享问题稍微复杂一点。虽然数组也象其它变量一样可以在不同语言脚本之间共享,但必须注意

兼容方面的问题。   
 
  VBScript数组在JScript下可以用VBScript的符号引用,即用myArray(2)引用数组元素而不是JScript

的数组元素引用符号myArray[2]。此外,还可以使用一个特殊的JScript对象――VBArray对象将VBScript

数组转换为JScript数组。下面的代码从VBScript数组myVBArray创建JScript数组myJSArray:   
 
 var  Temp  =  new  VBArray(myVBArray) 
 var  myJSArray 
 myJSArray  =  Temp.toArray() 
 
  上述代码首先创建一个临时的VBArray对象,然后使用它的toArray()方法将自己转换为JScript数组

。此后就可以象普通JScript数组一样使用myJSArray,如myJSArray[1]。但应当注意的是,toArray()方

法将把一个多维的VBArray转换为一维的JScript数组。   
 
  从VBScript中引用JScript数组更为复杂。虽然在VBScript中我们可以直接访问JScript数组相关的方

法和属性,但没有直接访问JScript数组的单个元素的方法。也就是说,我们可以在VBScript脚本中读取

JScript数组的长度属性,如下所示:   
 
  x  =  myJSArray.length   
 
  但无法直接读取该数组的单个元素,下面的VBScript代码是不正确的:   
 
  x  =  myJSArray(3)   
 
  解决该问题的一个可行的方法是执行一个转换过程,如下面的代码所示,此处假定VBScript是缺省的

脚本语言:   
 
<% 
  Dim  Temp 
  Dim  myVBArray 
  Temp  =  myJSArray.join(",  ") 
  myVBArray  =  Split(Temp,  ",  ") 
%> 

===================================================================
<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         document.writeln(k)
         k = k + 1
      Next
      document.writeln("vbCRLF")
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vbarray){
   var a = new VBArray(vbarray);
   var b = a.toArray();
   var i;
   for (i = 0; i < 9; i++)
   {
      document.writeln(b[i]);
   }
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT LANGUAGE="JScript">
<!--
   VBArrayTest(CreateVBArray());
-->
</SCRIPT>
</BODY>
 
  此处的JScript  join()方法将数组myJSArray元素转换到一个以逗号为分割符的字符串,VBScript 

Split()函数将字符串转换为VBScript数组。注意这里我们是在VBScript环境下调用JScript的join方法。

依照此例,我们可以通过自定义VBScript函数来模拟JScript的VBArray对象的toArray()方法以实现

JScript数组到VBScript数组的转换。 

 

========================================================================

Asp 数组的使用     [ 日期:2006-04-29 ]   [ 来自:不详 ] 数组是有序数据的集合。数组中的元素

可以不属于同一个数据类型。用一个统一的数组名和下标来唯一地确定数组中的元素,更改其中一个元素

并不会影响其它元素。数组的下标是有界的,分为下界和上界。数组可以用Dim、Private、Public或

Static来声明,它们的语法格式相同。下面只介绍用Dim声明数组的方法。

1.数组的定义与声明
数组的定义语法如下:

Dim 数组名( [[下标下界 To ]  下标上界] )  [As 数据类型]

例如(假设在当前模块中 数组的缺省下界为0)):

       ①    Dim  A(10)  As  Integer

       表示数组名为A,此数组下标下界为缺省值0,下标上界为10,有11个Integer类型的元素,从A(0)

、A(1)到A(10)。

       ②    Dim  B(1 To 20)  As  Integer

       表示数组名为B,此数组下标下界为1,下标上界为20,有20个Integer类型的元素,从B(1)到B

(20)。

③Dim DayArray(50)

表示DayArray 是一个有 51 个索引(从 0 到 50)元素的 Variant 数组。

④Dim Matrix(3, 4) As Integer

表示Matrix 是一个二维 Integer 数组。

⑤Dim MyMatrix(1 To 5,  4 To 9,  3 To 5) As Double

表示MyMatrix 是一个显式指定了上下界的三维 double 数组。

⑥Dim BirthDay(1 To 10) As Date

表示BirthDay 是一个索引从 1 到 10 的 Date型 数组。

2.Option Base 语句
Option Base 语句在模块级别中使用,用来声明数组下标的缺省下界。

Option Base 语句的语法如下:

Option Base {0 | 1}

  说明:缺省状态下数组下界为 0,此时无需使用 Option Base 语句。如果使用该语句规定数组下界1

,则必须在模块的数组声明之前使用Option Base 语句。

 

注意:

(1)Dim、Private、Public、ReDim 以及 Static 语句中的 To 子句提供了一种更灵活的方式来控制数

组的下标。不过,如果没有使用 To 子句显式地指定下界,则可以使用 Option Base 将缺省下界设为 1

。使用 Array 函数创建的数组的下界也受 Option Base 语句指定的下界的决定, 除非 Array 是由类型

库(例如 VBA.Array )名称限定,如果是由类型库名称限定,则 使用Array 函数创建的数组的下界不受

Option Base 的影响。

(1)    Option Base 语句只影响位于包含该语句的模块中的数组下界。

 

关于数组声明的几点说明:

①数组名命名规则和变量名的相同。

②数组名后是用圆括弧括起来的,不能用方括弧,不同于C语言。

③下标的下界必须不能大于其上界。

④可以用变量名或常数名(以及实数)作下标的边界。当下标的边界是常数名时,数组的大小固定,当下

标的边界是变量名时,数组的大小可作动态定义,即数组的大小取决于程序运行过程中变量的值。因此,

VB 中数组又可以分为两种数组:静态数组、动态数组。

3.静态数组
静态数组是指数组元素的个数是固定不变的,即它们占用的内存空间大小是固定不变的。根据固定大小数

组的维数不同,可以将它分为一维数组和多维数组。

声明多维数组的语法格式为:

       Dim  数组名([下标边界列表])  [As  数据类型]

下标边界的定义形式:[下标下界 To]下标上界

下标边界列表指用逗号分开的数组各维的下标边界,即

[下标下界 To]下标上界,[下标下界 To]下标上界,……,[下标下界 To]下标上界

(第一维)              (第二维)                   (第n维)

当n=1时,数组称作一维数组;当n=2时,数组称作二维数组;依次类推,当n=m时,数组称作m维数组。

下面举例介绍一维数组的使用。

’声明一个长度为51的字符串数组FriendsName

Dim FriendsName(50) As String

’声明一个长度为11的全局整型数组Class

Public Class(10) As Integer

一维数组中的元素个数为(上界-下界+1)。

为数组赋初值可以采用循环语句,如:

        Dim I As Integer

        For I = 0 To 11             ’循环语句的使用程序流程的控制

             C(I) = I

        Next I

  如果不显式指定下标下界,则数组的下标下界由 Option Base 语句控制。如果没有 Option Base 语

句则下界为默认为 0。

数组的维数并不限于2,在VB中,可以扩大至于60,在实际应用上对三维以上的数组的应用是不多的。定

义一个多维数组时只需一条Dim语句指定数组的所有下标边界即可,使用多维数组的可以很方便的表示一

些有意义的统计数据。例如:

Dim  Profit(16,10,12)  As Currency

这个Profit数组可用来表示以店名、部门及月份为参数的某百货公司的利润。如:Profit(2,8,11)代表了

第二分店的第八部门在11月份的利润。

4.动态数组
有时在数组开始使用前,不能知道需要多大的数组才能满足实际需要。当然可以把数组的大小定义到足够

大来满足任意的实际应用需要,这种方法效率很低(大量浪费内存空间)。如果使用动态数组,就可以在

程序运行时根据实际需要,精确定义数组的大小。

在声明数组时,不给出维数列表就是将数组声明为动态数组。例如:

              Dim  MyArry() As Integer

在使用动态数组前,必须使用ReDim语句把它重新定义。如前面声明的数组MyArry,可以用以下语句将它定

义为一个动态二维数组。

              ReDim  MyArry(10,10)

还可以通过重复执行ReDim语句,多次定义动态数组。使用ReDim最多能定义数组的维数是60。ReDim语句

可以改变数组每维的元素个数,但不能改变维数。下面是对ReDim语句的一个标准应用举例。

              Dim  MyArry() As Single          ‘声明动态数组

              ReDim  MyArry(30,20,10)          ‘重新定义数组

              ReDim  MyArry(50,23,21)          ‘再次重新定义数组

ReDim的语法与Dim的相同,此外,它还有选择项Preserve关键词:

              ReDim  Preserve  数组名 ([ [下标下界 To]下标上界])  [As  数据类型]

例如:

              ReDim  MyArry(50,23,21)

              ReDim  Preserve  MyArry(50,23,50)

注意:使用ReDim 时,重新定义数组会使所有数组元素的值消失,而使用Preserve可以保留数据。但是用

Preserve只能在改变数组的最后一维的大小时,保留数组的数据。对于一维数组来说,所有数据都会保留

,而对于多维数组:只能改变最后一维的大小,才能保留全部数组数据,否则出错。

5.LBound 函数和UBound 函数
LBound 函数和Ubound函数都是返回一个 Long 型数据,前者得到的值为指定数组维可用的最小下标,而

后者得到的是最大下标。它们的语法为:

LBound(数组名[, 指定的维数])

UBound(数组名[, 指定的维数])

  其中数组名是必选的。指定的维数是可选的,表明指定返回哪一维的下界。1 表示第一维,2 表示第

二维,如此类推。如果省略指定的维数,就默认为是 1。

  关于如何使用LBound 函数与 UBound 函数可参见下例:

Dim A(1 to 100,3,-3 to 4) As Integer  ’定义一三维数组,假定没有使用Option Base 语

’句改变数组下界的默认值。

对数组A使用Lbound 和Ubound函数,其返回值列表如下


所有维的缺省下界取决于 Option Base 语句的设置。可以看出对一数组使用LBound 函数与 UBound 函数

,可用于确定一个数组中元素的个数。

对于那些在声明中用 To 子句来设定维数的数组而言,它们可以用任何整数作为下界而不受Option Base

语句的限制。

6.数组的高级功能
尽管数组最通常被用来存储成组的变量,但是在别的一些方面数组也是很有用的。可以将一个数组的内容

赋值给另一个数组、创建返回数组的函数,还可以创建返回数组的属性。在许多情况下,这些技术能改进

应用程序的性能。

正如可以将一个变量的值赋给另一个变量,例如 StrA = StrB ,也可以将一个数组的内容赋给另一个数

组。例如,要将一字节型数组从一个位置复制到另一个位置。可以通过每次复制一个字节来实现,程序如

下:

Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte)

‘参数oldCopy()是源数组,newCopy()是目标数组

   Dim i As Integer

   ReDim newCopy (Lbound(oldCopy) To UBound(oldCopy)) ’重新定义动态数组

   For i = Lbound(oldCopy) To Ubound(oldCopy)        ’循环赋值

      newCopy(i) = oldCopy(i)

   Next

End Sub

一个更有效的简单的方法就是直接将一个数组赋给另外一个数组:

Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte)

‘参数oldCopy()是源数组,newCopy()是目标数组

   newCopy = oldCopy        ’利用数组直接进行赋值

End Sub

关于变量赋值有一些规则需要铭记。例如,虽然可以将一个声明为整型的变量赋给一个声明为长整型的变

量而不会产生任何问题,但是将一个长整型变量赋给一个整型变量就很容易导致溢出错误。除了遵守有关

数据类型变量之间赋值时的规则外,数组赋值还要遵从另外一些规则,包括数组维数,每一维的大小,以

及数组是固定的还是动态的。

①维数、数据类型不同的数组赋值考虑的几个因素

l         赋值符左边的数组类型:固定数组 (Dim x(1 to 10) As Integer) 或者动态数组 (Dim x()

As Integer)。

l         赋值符左边数组的维数是否和赋值符右边数组的维数匹配。

l         赋值符两边数组的每一维的数组元素个数是否匹配。即使数组的声明不同,维数也可能匹配。

比如一个数组的每一维元素从 0 开始编号而另一个则从 1 开始,维数也可能匹配。

l         赋值符两边所有元素的数据类型必须是相容的。这些规则和变量赋值的规则是一致的。

表3-6显示了这些因素的影响:


数组赋值时的错误可能发生在编译时,也可能发生在运行时(例如,如果数据类型不能强制转换或赋值试

图重新声明 (ReDim) 一个静态数组)。设计程序时要添加错误处理以确保数组在赋值之前是匹配的。

②编写返回数组的函数

从一个函数返回一组值是可能实现的。例如,从一个函数返回一组字节而不必将其先转换为一个字符串然

后再转换回来。

下面是一个使用返回字节数组的函数的简单示例:

Private Sub Form_Load()

   Dim b As Byte

   Dim i As Integer

   Dim ReturnArray() As Byte

   b  = Cbyte(54)

   ReturnArray() = ArrayFunction(b)  ’调用函数

   For i = Lbound(ReturnArray) To Ubound(ReturnArray)

      Msgbox ReturnArray(i)  ’通过弹出消息框循环显示数组值

   Next

End Sub

 

Public Function ArrayFunction(b As Byte) As Byte()

   Dim x(2) As Byte

   x(0) = b

   x(1) = b + CByte(200)

   x(2) = b + b

   ArrayFunction = x   ’返回结果为数组x

End Function

 

在运行以上示例后, ReturnArray() 是一个三元素数组,其中包含了分配给 ArrayFunction 中数组的值

。ArrayFunction 语句将一个数组作为参数传递;且数组的数据类型必须和函数的数据类型相同(在本例

中是字节)。因为这是一个函数调用,传递数组时不必带括号。

注意:

1.尽管可以通过赋值给另一个数组(ArrayFunction = x())来返回一个数组,但出于性能方面的考虑,

并不推荐使用这种方法。

2.必须为返回数组的函数指定一个类型,这个类型可以是 Variant。这样一来,Function X() As

Variant() 是有效的而 Function X() As () 将失败。

3.当调用一个返回数组的函数时,用来保存返回值的变量也必须是一个数组,而且其数据类型必须和函

数返回类型相同,否则将显示一个“类型不匹配”的错误。

 


// statements_if_else2.cs
// else-if
using System;
public class IfTest
{
    static void Main()
    {
        Console.Write("Enter a character: ");
        char c = (char)Console.Read();

        if (Char.IsUpper(c))
        {
            Console.WriteLine("Character is uppercase.");
        }
        else if (Char.IsLower(c))
        {
            Console.WriteLine("Character is lowercase.");
        }
        else if (Char.IsDigit(c))
        {
            Console.WriteLine("Character is a number.");
        }
        else
        {
            Console.WriteLine("Character is not alphanumeric.");
        }
    }

 

 

 

C# DateTime日期类型格式化显示
1.绑定时格式化日期方法:
<ASP:BOUNDCOLUMN DATAFIELD= "JoinTime " DATAFORMATSTRING= "{0:yyyy-MM-dd} " >
<ITEMSTYLE WIDTH= "18% " > </ITEMSTYLE >
</ASP:BOUNDCOLUMN >

2.数据控件如DataGrid/DataList等的件格式化日期方法:
e.Item.Cell[0].Text = Convert.ToDateTime(e.Item.Cell[0].Text).ToShortDateString();

3.用String类转换日期显示格式:
String.Format( "yyyy-MM-dd ",yourDateTime);

4.用Convert方法转换日期显示格式:
Convert.ToDateTime("2005-8-23").ToString

("yyMMdd",System.Globalization.DateTimeFormatInfo.InvariantInfo); //支持繁体数据库

5.直接用ToString方法转换日期显示格式:
DateTime.Now.ToString("yyyyMMddhhmmss");
DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")

6.只显示年月
DataBinder.Eval(Container.DataItem,"starttime","{0:yyyy-M}")

7.显示时间所有部分,包括:年月日时分秒
<asp:BoundColumn DataField="收款时间" HeaderText="收款时间"
DataFormatString="{0:yyyy-MM-dd HH24:mm:ss}">
</asp:BoundColumn>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值