C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题...

本文详细介绍了C#中字符串数组的排序问题,包括如何正确处理字符排序,以及C#的多种排序算法和字符串比较方法。此外,还深入探讨了.NET框架下通用JSON解析和构建类的实现,提供了不同方式构建JSON对象的示例。同时,文章涵盖了C#处理JSON文件的基础知识,以及在ASP.NET中使用Jquery和iframe传递值的问题。
摘要由CSDN通过智能技术生成

C#字符串数组排序

 
//排序只带字符的数组,不带数字的
private    string []   aa   ={ "a " , "c " , "b " };
Array.Sort(aa);
     MessageBox.Show(aa[0]);
     MessageBox.Show(aa[1]);
     MessageBox.Show(aa[2]);
 
结果是:a,b,c

如果想实现

Array.Sort(arr); 
不对!!!!!!!!!! 
比如:   A1,A2,A10 
用Array.Sort(arr);排出来就是 
A1,A10,A2 
而我要的是 
A1,A2,A10

这样就可以了:
public    class    CustomComparer:System.Collections.IComparer
{
public    int    Compare( object    x,   object    y){
string    s1   =   ( string )x;
string    s2   =   ( string )y;
if    (s1.Length   >   s2.Length)   return    1;
if    (s1.Length   <   s2.Length)   return    -1;
for    ( int    i   =   0;   i   <   s1.Length;   i++)   {
if    (s1[i]   >   s2[i])   return    1;
if    (s1[i]   <   s2[i])   return    -1;
}
return    0;
}
}
 
应用:
string []   str   =   new    string []{ "A1 " , "A2 " , "A10 " };
Array.Sort(str,   new    CustomComparer());
for    ( int    i   =   0;   i   <   str.Length;   i++)
Console.WriteLine(str[i]);

 但是这样不对带有字符的字符排序。

 

 

 

C#排序算法大全

 
C#排序算法大全
土人
2004-7-21
一、冒泡排序(Bubble)
 
using  System;
 
namespace  BubbleSorter
{
public  class  BubbleSorter
{
public  void  Sort( int [] list)
{
int  i,j,temp;
bool  done= false ;
j=1;
while ((j<list.Length)&&(!done))
{
done= true ;
for (i=0;i<list.Length-j;i++)
{
if (list[i]>list[i+1])
{
done= false ;
temp=list[i];
list[i]=list[i+1];
list[i+1]=temp;
}
}
j++;
}
}
}
 
public  class  MainClass
{
public  static  void  Main()
{
int [] iArrary= new  int []{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
BubbleSorter sh= new  BubbleSorter();
sh.Sort(iArrary);
for ( int  m=0;m<iArrary.Length;m++)
Console.Write( "{0} " ,iArrary[m]);
Console.WriteLine();
}
}
}
 
二、选择排序(Selection)
 
using  System;
 
namespace  SelectionSorter
{
public  class  SelectionSorter
{
private  int  min;
public  void  Sort( int  [] list)
{
for ( int  i=0;i<list.Length-1;i++)
{
min=i;
for ( int  j=i+1;j<list.Length;j++)
{
if (list[j]<list[min])
min=j;
}
int  t=list[min];
list[min]=list[i];
list[i]=t;
}
}
}
 
public  class  MainClass
{
public  static  void  Main()
{
int [] iArrary = new  int []{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
SelectionSorter ss= new  SelectionSorter();
ss.Sort(iArrary);
for  ( int  m=0;m<iArrary.Length;m++)
Console.Write( "{0} " ,iArrary[m]);
Console.WriteLine();
}
}
}
 
三、插入排序(InsertionSorter)
 
using  System;
 
namespace  InsertionSorter
{
public  class  InsertionSorter
{
public  void  Sort( int  [] list)
{
for ( int  i=1;i<list.Length;i++)
{
int  t=list[i];
int  j=i;
while ((j>0)&&(list[j-1]>t))
{
list[j]=list[j-1];
--j;
}
list[j]=t;
}
}
}
 
public  class  MainClass
{
public  static  void  Main()
{
int [] iArrary= new  int []{1,13,3,6,10,55,98,2,87,12,34,75,33,47};
InsertionSorter ii= new  InsertionSorter();
ii.Sort(iArrary);
for ( int  m=0;m<iArrary.Length;m++)
Console.Write( "{0}" ,iArrary[m]);
Console.WriteLine();
}
}
}
 
四、希尔排序(ShellSorter)
 
using  System;
 
namespace  ShellSorter
{
public  class  ShellSorter
{
public  void  Sort( int  [] list)
{
int  inc;
for (inc=1;inc<=list.Length/9;inc=3*inc+1);
for (;inc>0;inc/=3)
{
for ( int  i=inc+1;i<=list.Length;i+=inc)
{
int  t=list[i-1];
int  j=i;
while ((j>inc)&&(list[j-inc-1]>t))
{
list[j-1]=list[j-inc-1];
j-=inc;
}
list[j-1]=t;
}
}
}
}
 
public  class  MainClass
{
public  static  void  Main()
{
int [] iArrary= new  int []{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
ShellSorter sh= new  ShellSorter();
sh.Sort(iArrary);
for ( int  m=0;m<iArrary.Length;m++)
Console.Write( "{0} " ,iArrary[m]);
Console.WriteLine();
}
}
}

 

 

 

 

C#字符串比较方法

 
 

用C#比较字符串有多种方法,如:

1. string.Compare(x,y);
2. string.Equals(x,y) ;

如果要不区分大小写进行比较,则对应为:
string.Compare(x,y);
string.Equals(x,y);

注:string.Compare比较结果的含义:

含义

小于零

x 小于 y。 或 x 为 空引用(在 Visual Basic 中为 Nothing)。

x 等于 y。

大于零

x 大于 y。 或 y 为 空引用(在 Visual Basic 中为 Nothing)。

string.Equals比较结果的含义为:

含义

true

x 等于 y。

false

x 不等 y。

 


 

其它常用字符串操作:

1、从字符串中提取子串
StringBuilder 类没有支持子串的方法,因此必须用String类来提取。
string mystring="My name is ynn.";
//Displays "name is ynn."
Console.WriteLine(mystring.Substring( 3 ));
//Displays "ynn"
Console.WriteLine(mystring.Substring( 11,3 ));

 

2、比较字符串
String 类有四种方法:Compare( )、CompareTo( )、CompareOrdinal( )、Equals( )。
Compare( )方法是CompareTo( )方法的静态版本。只要使用“=”运算符,就会调用Equals( )方法,的以Equals( )方法与“=”是等价的。CompareOrdinal( )方法对两个字符串比较不考本地语言与文件。
示例:
int result;
bool bresult;
s1="aaaa";
s2="bbbb";
//Compare( )method
//result值为“0”表示等,小于零表示 s1 < s2,大于零表示 s1 > s2
result=String.Compare(s1,s2);
result=s1.CompareTo( s2 );
result=String.CompareOrdinal(s1,s2);
bresult=s1.Equals( s2 );
bresult=String.Equals( s1,s2 );
一个例外情况是,两个字符串都是内置的,并相等,静态方法要快得多。

3、字符串格式化

3.1 格式化数字
格式字符    说明和关联属性 


c、C       货币格式。
d、D       十进制格式。 
e、E       科学计数(指数)格式。 
f、F       固定点格式。 
g、G       常规格式。 
n、N       数字格式。 
r、R       往返格式,确保将已转换成字符串的数字转换回数字时具有与原数字相同的值。 
x、X       十六进制格式。


double val=Math.PI;
Console.WriteLine(val.ToString( ));  //displays 3.14159265358979
Console.WriteLine(val.ToString("E"));//displays 3.141593E+000
Console.WriteLine(val.ToString("F3");//displays 3.142
int val=65535;
Console.WriteLine(val.ToString("x"));  //displays ffff
Console.WriteLine(val.ToString("X"));  //displays FFFF
Single val=0.123F;
Console.WriteLine(val.ToString("p"));  //displays 12.30 %
Console.WriteLine(val.ToString("p1"));  //displays 12.3 %
默认格式化会在数字和百分号之间放入一个空格。定制方法如下: 
其中NumberFormatInfo类是System.Globalization命名空间的一个成员,因此该命名空间必须导入到程序中。
Single val=0.123F;
object myobj=NumberFormatInfo.CurrentInfo.Clone( ) as NumberFormatInfo;
NumberFormatInfo myformat=myobj as NumberFormatInfo;
myformat.PercentPositivePattern=1;
Console.WriteLine(val.ToString("p",myformat)); //displays 12.30%;
Console.WriteLine(val.ToString("p1",myformat)); //displays 12.3%;
格式化具有很大的灵活性。下面的例子演示一个没有意义的货币结构:
double val=1234567.89;
int [] groupsize={2,1,3};
object myobj=NumberFormatInfo.CurrentInfo.Clone( );
NumberFormatInfo mycurrency=myobj as NumberFormatInfo;
mycurrency.CurrencySymbol="#"; //符号
mycurrency.CurrencyDecimalSeparator=":"; //小数点
mycurrency.CurrencyGroupSeparator="_";  //分隔符
mycurrency.CurrencyGroupSizes=groupsize;
// 输出 #1_234_5_67:89
Console.WriteLine(val.ToString("C",mycurrency));

 

3.2 格式化日期
输出形式取决于用户计算机的文化设置。
using System;
using System.Globalization; 
public class MainClass 

  public static void Main(string[] args)  
  {
        DateTime dt = DateTime.Now;
        String[] format = {"d","D","f","F","g","G","m","r","s","t", "T","u", "U","y","dddd, MMMM dd yyyy","ddd, MMM d \"'\"yy","dddd, MMMM dd","M/yy","dd-MM-yy",};
        String date;
      for (int i = 0; i < format.Length; i++) 
      {
         date = dt.ToString(format[i], DateTimeFormatInfo.InvariantInfo);
         Console.WriteLine(String.Concat(format[i], " :" , date));
      }
     }
}
d :07/11/2004    <=======输出
D :Sunday, 11 July 2004
f :Sunday, 11 July 2004 10:52
F :Sunday, 11 July 2004 10:52:36
g :07/11/2004 10:52
G :07/11/2004 10:52:36
m :July 11
r :Sun, 11 Jul 2004 10:52:36 GMT
s :2004-07-11T10:52:36
t :10:52
T :10:52:36
u :2004-07-11 10:52:36Z
U :Sunday, 11 July 2004 02:52:36
y :2004 July
dddd, MMMM dd yyyy :Sunday, July 11 2004
ddd, MMM d "'"yy :Sun, Jul 11 '04
dddd, MMMM dd :Sunday, July 11
M/yy :7/04
dd-MM-yy :11-07-04

3.3 格式化枚举
enum classmen
{
  ynn=1,
  yly=2,
  css=3,
  C++=4
}
获取枚举字符串信息如下:
classmen myclassmen=classmen.yly;
Console.WriteLine(myclassmen.ToString( ));   //displays yly
Console.WriteLine(myclassmen.ToString("d")); //displays 2
从系统枚举中获取文本人信息如下:
DayOfWeek day=DayOfWeek.Friday;
//displays "Day is Friday"
Console.WriteLine(String.Format("Day is {0:G}",day));
格式化字符串“ G ”把枚举显示为一个字符串。

 

 

 

 

 

一个.NET通用JSON解析/构建类的实现(c#)

 
 

在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。本文将试图提供一个高度灵活的JSON通用类型(JsonObject),实现对JSON的解析及序列化。

假设JSON对象内容如下:

隐藏行号 复制代码 ? JSON
  1. {
                      
  2. orders: {
                      
  3. date: '21:31:59',
  4. name: 'Xfrog',
  5. books: [{
                      
  6. name: 'C# 网络核心编程',
  7. publish: '2010-3-24'
  8. }, {
                      
  9. name: 'C#入门经典中文版',
  10. publish: '2009-10-16'
  11. }]
  12.     },
  13. blog: 'http://www.cnblogs.com/xfrog'
  14. }

 

使用JsonObject来构建,可选择以下三种方式: 
方式一:

隐藏行号 复制代码 ? C#
  1. //通过标准构造函数
    
  2. JsonObject json = new JsonObject();
    
  3. json["orders"] = new JsonProperty(new JsonObject());
    
  4. json["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog");
    
  5.  
  6. JsonObject config = json.Properties<JsonObject>("orders");
    
  7. json["orders"]["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
    
  8. json["orders"]["name"] = new JsonProperty("Xfrog");
    
  9. json["orders"]["books"] = new JsonProperty();
    
  10.  
  11. JsonProperty book = json["orders"]["books"].Add(new JsonObject());
    
  12. book["name"] = new JsonProperty("C# 网络核心编程");
    
  13. book["publish"] = new JsonProperty("2010-3-24");
    
  14.  
  15. book = json["orders"]["books"].Add(new JsonObject());
    
  16. book["name"] = new JsonProperty("C#入门经典中文版");
    
  17. book["publish"] = new JsonProperty("2009-10-16");
    

 


方式二:

隐藏行号 复制代码 ? C#
  1. //通过回调函数简化对象的构建
    
  2. JsonObject json2 = new JsonObject((a) =>
    
  3. {
    
  4.     a["orders"] = new JsonProperty(new JsonObject((b) =>
    
  5.     {
    
  6.         b["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
    
  7.         b["name"] = new JsonProperty("Xfrog");
    
  8.         b["books"] = new JsonProperty();
    
  9.         b["books"].Add(new JsonObject((c) =>
    
  10.         {
    
  11.             c["name"] = new JsonProperty("C# 网络核心编程");
    
  12.             c["publish"] = new JsonProperty("2010-3-24");
    
  13.         }));
    
  14.         b["books"].Add(new JsonObject((c) =>
    
  15.         {
    
  16.             c["name"] = new JsonProperty("C#入门经典中文版");
    
  17.             c["publish"] = new JsonProperty("2009-10-16");
    
  18.         }));
    
  19.     }));
    
  20.     a["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog");
    
  21. });
    

 

方式三:

隐藏行号 复制代码 ? C#
  1. //通过字符串构建Json对象
    
  2. JsonObject newObj = new JsonObject(jsonStr);
    

 


获取Json对象属性值的方法,也有三种方式:

隐藏行号 复制代码 ? C#
  1. //通过泛型函数
    
  2. Console.WriteLine(newObj["orders"].GetValue<JsonObject>()["books"].GetValue<List<JsonProperty>>()[1].GetValue<JsonObject>()["name"].Value);
    
  3. //通过属性类型对应的属性
    
  4. Console.WriteLine(newObj["orders"].Object["books"].Items[1].Object["name"].Value);
    
  5. //如果属性为对象类型,可通过字符串索引简化
    
  6. Console.WriteLine(newObj["orders"]["books"][1]["name"].Value);
    

    通用类:代码
    /**********************************************************
      * 作者:wHaibo
      * Email:xfrogcn@163.com
      * 日期:2010-04-07
      * 版本:1.0
      * 说明:Json通用转换类
      *********************************************************/
     
    using  System;
    using  System.Collections.Generic;
    using  System.Text;
     
    namespace  Xfrog.Net
    {
     
         /// <summary>
         /// 用于构建属性值的回调
         /// </summary>
         /// <param name="Property"></param>
         public  delegate  void  SetProperties(JsonObject Property);
     
         /// <summary>
         /// JsonObject属性值类型
         /// </summary>
         public  enum  JsonPropertyType
         {
             String,
             Object,
             Array,
             Number,
             Bool,
             Null
         }
     
         /// <summary>
         /// JSON通用对象
         /// </summary>
         public  class  JsonObject
         {
             private  Dictionary<String, JsonProperty> _property;
     
             public  JsonObject()
             {
                 this ._property = null ;
             }
     
             public  JsonObject(String jsonString)
             {
                 this .Parse( ref  jsonString);
             }
     
             public  JsonObject(SetProperties callback)
             {
                 if  (callback != null )
                 {
                     callback( this );
                 }
             }
     
             /// <summary>
             /// Json字符串解析
             /// </summary>
             /// <param name="jsonString"></param>
             private  void  Parse( ref  String jsonString)
             {
                 int  len = jsonString.Length;
                 bool  poo = string .IsNullOrEmpty(jsonString);
                 string  po = jsonString.Substring(0, 1);
                 string  ll = jsonString.Substring(jsonString.Length - 1, 1);
                 if  (String.IsNullOrEmpty(jsonString) || jsonString.Substring(0, 1) != "{"  || jsonString.Substring(jsonString.Length - 1, 1) != "}" )
                 {
                     throw 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值