- 浏览: 77240 次
文章分类
- 全部博客 (48)
- AOP (0)
- ASP.NET (1)
- C# (0)
- Community Server (0)
- Database (0)
- Design Pattern (3)
- JAVA (1)
- JavaScript (1)
- Linux (1)
- O/R Mapping (0)
- OO (3)
- SQL Server (1)
- VB.NET (0)
- Visual Studio 2005 (2)
- Windows (2)
- WPF (0)
- XML/XSLT (0)
- 常用工具类 (0)
- 人生感悟 (0)
- 算法 (0)
- 转载 (5)
- [网站分类]1.首页原创精华.NET区(包含架构设计、设计模式)(对首页文章的要求:原创、高质量、经过认真思考并精心写作) (3)
- [网站分类]2..NET新手区(用于发表不合适发表在首页的.NET技术文章,包括小经验、小技巧) (15)
- [网站分类]3.非技术区(技术之外的文章,但不要涉及任何政治内容) (2)
- [网站分类]4.其他技术区 (4)
- [网站分类]5.企业信息化 (0)
- [网站分类]6.读书心得区(技术书籍阅读心得、书籍推荐) (0)
- [网站分类]7.提问区(.NET技术方面的提问) (0)
- [网站分类]8.技术转载区(.NET技术文章转载, 请注明原文出处) (1)
- [网站分类]9.求职招聘区(个人求职、企业招聘) (0)
- [网站分类]Dottext区 (0)
- [网站分类]GIS技术 (0)
- [网站分类]IT英才专区(IT职场交流) (0)
- [网站分类]SharePoint (0)
- [网站分类]博客园.NET俱乐部(俱乐部组织与活动方面的文章) (0)
- [网站分类]软件发布区(发布自己开发的代码、软件) (0)
- [网站分类]网站管理区(网站管理方面的疑问、建议、意见, 寻求管理员帮助) (0)
- [网站分类]业界新闻 (0)
最新评论
-
xjw1987524:
这个问题我是弄啦很久,我也试过反编译,不知道为什么就是不成功; ...
支持中文参数的 jspSmartUpload
比较高效地实现从两个不同数组中提取相同部分组成新的数组(只支持Int类型) [C#]
有时候我们需要从两个不同数组中提取出相同的部分的数组或者计算有多少个相同的项,这个算法刚好能派上用场,
实现方案:
1、将两个数组按从小到大排序;
2、遍历第一个数组 array1,跟第二个数组 array2 做比较;
3、如果找到相等的则提取出该数据并且记录下 array2 的下标到临时变量 t,下次循环则从 array2[t+1] 开始遍历 array2;
4、如果没有匹配到相等的而且 array2[t] 大于与 array1 对比的数据时, 记下 array2 当前下标到临时变量 t,下次循环则从 array2[t] 开始;
经过测试,该算法比“最笨”的作法无法在数组以何种方式排序都要强,如果量越多会越明显,有点可惜的是暂时只能使用在 Int[] 上,有时间再想一下其它数据类型的比较
获取两个整型数组中相等项的集合
<!---->获取两个整型数组中相等项的集合#region 获取两个整型数组中相等项的集合
/**//// <summary>
/// 获取两个整型数组中相等项的集合
/// </summary>
/// <param name="array1"></param>
/// <param name="array2"></param>
/// <returns></returns>
public static int[] CompareEquation(int[] array1, int[] array2)
{
int i1, i2;
// 记录第二个数组上一次匹配到的位置
int t = 0;
// 记录相同的项
List<int> equal = new List<int>();
int[] sort1 = BubbleSort(array1);
int[] sort2 = BubbleSort(array2);
for (int i = 0; i < sort1.Length; i++)
{
i1 = sort1[i];
for (int j = t; j < sort2.Length; j++)
{
i2 = sort2[j];
if (i2 == i1)
{
equal.Add(i2);
// 下次比较从下一位开始
t = j + 1;
}
else if (i2 > i1)
{
// 下次比较继续从这里开始
t = j;
break;
}
}
}
return equal.ToArray();
}
#endregion
<!---->获取两个整型数组中相等项的集合#region 获取两个整型数组中相等项的集合
/**//// <summary>
/// 获取两个整型数组中相等项的集合
/// </summary>
/// <param name="array1"></param>
/// <param name="array2"></param>
/// <returns></returns>
public static int[] CompareEquation(int[] array1, int[] array2)
{
int i1, i2;
// 记录第二个数组上一次匹配到的位置
int t = 0;
// 记录相同的项
List<int> equal = new List<int>();
int[] sort1 = BubbleSort(array1);
int[] sort2 = BubbleSort(array2);
for (int i = 0; i < sort1.Length; i++)
{
i1 = sort1[i];
for (int j = t; j < sort2.Length; j++)
{
i2 = sort2[j];
if (i2 == i1)
{
equal.Add(i2);
// 下次比较从下一位开始
t = j + 1;
}
else if (i2 > i1)
{
// 下次比较继续从这里开始
t = j;
break;
}
}
}
return equal.ToArray();
}
#endregion
冒泡法排序(非原创)
<!---->冒泡法排序(非原创)#region 冒泡法排序(非原创)
/**//// <summary>
/// 冒泡法排序
/// </summary>
/// <returns>排序结果: 从小到大(升序)</returns>
/// <see cref="http://www.aspcool.com/lanmu/browse1.asp?ID=1223&bbsuser=csharp"/>
public static int[] BubbleSort(int[] R)
{
int i, j, temp;
//交换标志
bool exchange;
//最多做R.Length-1趟排序
for (i = 0; i < R.Length; i++)
{
//本趟排序开始前,交换标志应为假
exchange = false;
for (j = R.Length - 2; j >= i; j--)
{
//交换条件
if (R[j + 1] < R[j])
{
temp = R[j + 1];
R[j + 1] = R[j];
R[j] = temp;
//发生了交换,故将交换标志置为真
exchange = true;
}
}
//本趟排序未发生交换,提前终止算法
if (!exchange)
{
break;
}
}
return R;
}
#endregion
<!---->冒泡法排序(非原创)#region 冒泡法排序(非原创)
/**//// <summary>
/// 冒泡法排序
/// </summary>
/// <returns>排序结果: 从小到大(升序)</returns>
/// <see cref="http://www.aspcool.com/lanmu/browse1.asp?ID=1223&bbsuser=csharp"/>
public static int[] BubbleSort(int[] R)
{
int i, j, temp;
//交换标志
bool exchange;
//最多做R.Length-1趟排序
for (i = 0; i < R.Length; i++)
{
//本趟排序开始前,交换标志应为假
exchange = false;
for (j = R.Length - 2; j >= i; j--)
{
//交换条件
if (R[j + 1] < R[j])
{
temp = R[j + 1];
R[j + 1] = R[j];
R[j] = temp;
//发生了交换,故将交换标志置为真
exchange = true;
}
}
//本趟排序未发生交换,提前终止算法
if (!exchange)
{
break;
}
}
return R;
}
#endregion
测试结果:
所谓的最笨的方法:
自我感觉最笨的作法
<!---->计算两个整型数组中数值相等的数量(最笨的方法)#region 计算两个整型数组中数值相等的数量(最笨的方法)
/**//// <summary>
/// 计算两个整型数组中数值相等的数量(最笨的方法)
/// </summary>
/// <param name="array1"></param>
/// <param name="array2"></param>
/// <returns></returns>
public static int[] CompareEquation1(int[] array1, int[] array2)
{
List<int> equal = new List<int>();
foreach (int i1 in array1)
{
foreach (int i2 in array2)
{
if (i1 == i2)
{
equal.Add(i1);
}
}
}
return equal.ToArray();
}
#endregion
<!---->计算两个整型数组中数值相等的数量(最笨的方法)#region 计算两个整型数组中数值相等的数量(最笨的方法)
/**//// <summary>
/// 计算两个整型数组中数值相等的数量(最笨的方法)
/// </summary>
/// <param name="array1"></param>
/// <param name="array2"></param>
/// <returns></returns>
public static int[] CompareEquation1(int[] array1, int[] array2)
{
List<int> equal = new List<int>();
foreach (int i1 in array1)
{
foreach (int i2 in array2)
{
if (i1 == i2)
{
equal.Add(i1);
}
}
}
return equal.ToArray();
}
#endregion
从图中可以看到运行效率有了很大的提升,
以上只是不成熟的解决方案,欢迎各位一起来讨论!
相关代码下载
发表评论
-
获取某目录下的所有文件(包括子目录下文件)的数量(C#)
2005-11-04 17:27 3973以前写过一个通过计算目录遍历所有文件和子目录的方法来获得某目录 ... -
Visual Studio 2005 试用笔记
2005-11-06 21:36 911今天开始用上了 VS 2005 ... -
C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式) 笔记
2005-11-09 22:52 1299(很喜欢李建忠老师的这个讲座,可惜暂时没更多的了,继续关注 M ... -
利用视图管理器高效编写 SQL SELECT 语句
2006-02-19 13:27 921献给初学者,老鸟别扔砖头 编写 ... -
将Web站点下的绝对路径转换为虚拟路径
2006-05-07 12:48 1178很经常使用到的一个功能,但在在网上却一直没有找到相关的解决方法 ... -
基于 .NET 2.0 System.Net.Mail namespace 的邮件发送组件
2006-05-17 13:11 1863一个基于 .NET 2.0 System.Net.Mail n ... -
从 CCS 1.1 升级到 CS 2.0 所遇到的问题和部分解决方法
2006-06-16 12:58 799整理了一下,记录在这 ... -
.NET Enum The Next Level
2006-08-20 17:15 1147声明:本文内容出自:http://www.codeprojec ... -
C# 中实现随机时间的获取
2006-09-07 17:31 1321原理其实非常简单,取出两个时间差的秒数,再在0到该秒数 ... -
NHibernate 实体类中重写 Equals() 和 GetHashCode()
2006-09-17 17:08 1526在正常的对象操作中,当两个对象都是通过 new ... -
初识 db4o
2006-10-25 21:41 920今天早上收到 IBM developerWork ... -
Spring.Net AOP 学习之旅: 使用 Throws Advice 处理异常
2006-10-30 21:12 4222写在前头:本文示例和部分文字来自《Sprin ... -
.NET 1.1 下不使用 System.Web.Mail.SmtpMail 发送邮件的其它选择
2006-12-22 20:35 1221最近工作原因需要维护 ASP.NET 1.1 的程 ... -
.NET 中的 委托与事件
2006-12-27 10:10 1908一、什么是委托 ...
相关推荐
3. **数组**:数组是C#中存储固定数量相同类型元素的数据结构。它可以是一维、二维或多维的。例如,一维数组`int[] numbers = new int[5]`创建了一个包含五个整数的数组。数组元素可以通过索引访问,索引从0开始。 ...
C#是一种强类型的、面向对象的编程语言,它提供了多种方法来实现从字符串数组中提取数字元素。下面,我们将详细介绍如何使用C#实现从字符串数组中提取数字元素。 为什么需要从字符串数组中提取数字元素 在实际开发...
在C#编程语言中,字符串和数组是两个非常基础且重要的概念。字符串是表示文本的数据类型,而数组则是一种能够存储同一类型数据集合的数据结构。本文档“c#字符串及数组操作ehk[文].pdf”主要介绍了如何在C#中进行...
在这个特定的场景中,我们关注的是"C#实现简单的串",这里的“串”指的是计算机科学中的字符串,即一连串字符的集合。在C#中,字符串是基于.NET框架的System.String类来处理的。 字符串在数据结构中占据着重要地位...
在C#编程环境中,开发图像处理应用是一项常见的任务,特别是在VS2008这样的集成开发环境中。本项目专注于两个核心概念:图像的...在VS2008中,使用适当的库和算法,可以方便地实现这些功能,为各种实际应用提供支持。
`compare`方法通常在C++或.NET框架中使用,它允许我们比较两个字符串的顺序。`string.Compare(str1, str2)`会返回一个整数值,根据`str1`和`str2`的相对大小:如果`str1`大于`str2`则返回正数,相等返回0,小于则...
(但是请注意:两个不同但结构上等效的委托类型的实例可能会比较为相等),准确地说,两个具有相同参数列表、签名和返回类型的不同的委托类型被认为是不同的委托类型。委托实例所封装的方法集合称为调用列表。 5, ...
在这里,我们使用`Substring`方法提取每两个字符形成一个字节的十六进制值,然后用`Convert.ToByte`将其转换为字节,最后通过`Encoding.Unicode.GetString`将字节数组解码为字符串。 注意,由于Unicode编码中每个...
以下是从标题和描述中提取的一些C#的关键知识点: 1. **面向对象特性**:C#支持面向对象编程的核心概念,包括封装、继承和多态。所有类型在C#中都被视为对象,这意味着每个类都有自己的属性和方法。 2. **.NET框架...
.NET框架由两大部分组成:公共语言运行时(Common Language Runtime, CLR)和框架类库。CLR是.NET应用程序运行的基础,它提供了类型系统(Common Type System, CTS)、公共语言规范(Common Language Specification,...
1. 数组操作:在C#中,数组是存储固定数量相同类型元素的数据结构。创建一个包含10个元素的int数组,并从键盘接收其值,需要使用`Console.ReadLine()`来读取用户输入,然后通过`int.TryParse()`或`int.Parse()`确保...
在C#编程中,将中文转换为全拼是一项常见的任务,尤其在处理自然语言处理、文本分析或用户输入转换等场景。以下是一个简单的C#代码示例,它演示了如何实现基本的中文到拼音的转换,但请注意,该示例并不支持多音字。...
10. 微软.NET框架:C#是.NET框架的一部分,利用它提供的丰富的类库,如System、System.IO和System.Collections等,可以方便地实现各种功能。 通过"一期C#测试题"的学习和练习,开发者可以巩固对C#语言基础的理解,...
【C#编程语言知识点】 ...以上是针对给定内容提取的C#编程语言的关键知识点,涵盖了类、继承、数组、类型转换、字符串操作、循环控制、面向对象特性、事件处理等多个方面。了解并掌握这些知识点对C#考试至关重要。
- C#中的数据类型分为两大类:值类型(如int、float、bool)和引用类型(如类、接口、数组)。值类型存储实际的数据,而引用类型存储对数据的引用。 - C#还提供了预定义的枚举(enum)和结构(struct)类型,以及...
在《爬虫/蜘蛛程序的制作(C#语言)》中已经介绍了爬虫程序的两个步骤:分析和下载。在单线程的程序中,两者是无法同时进行的。也就是说,分析时会造成网络空闲,分析的时间越长,下载的效率越低。反之也是一样,...
在C#编程中,有时我们需要从字符串中提取特定的信息,比如获取其中的最大长度的数字。这个任务可以通过编写算法函数来实现。本节我们将详细讲解如何使用C#编写一个函数,该函数可以从输入字符串中找到并返回最长的...
在C#编程语言中,了解并熟练使用常用函数对于编写高效和可维护的代码至关重要。以下是一些在C#中常见的函数及其应用: 1. `DateTime` 类:这个类提供了处理日期和时间的能力。例如,可以创建一个表示当前时间的`...
在C#编程中,掌握各种核心概念和技术...以上就是从给定的文件名中提取出的C#编程相关知识点,涵盖了常量、字符串操作、数据类型转换、文件处理、参数传递等多个方面。理解和掌握这些知识点对于提升C#编程能力至关重要。
在C#中实现这些功能,可以创建一个身份证验证类,包含一个验证方法,接受18位身份证号码作为输入参数。通过方法内部的逻辑判断,先进行校验码验证,再解析地区代码、出生日期和性别信息。地区代码可以通过查询预定义...