1. Activator和new的区别

    需要动态的创建一个实例模型的时候,就用Activator.CreateInstance(Type type);如果是明确的知道要创建哪个实例的模型,就可以用 new

    C#在类工厂中动态创建类的实例,所使用的方法为:

    1. Activator.CreateInstance (Type)

    2. Activator.CreateInstance (Type, Object[])
      两种方法区别仅为:创建无参数的构造方法和创建有参数的构造函数。

    动态创建时,可能会动态使用到外部应用的DLL中类的实例,则此时需要进行反编译操作,使用Reflection命名控件下的Assembly类。

    New 关键字实例化一个类
    New 关键字用于创建对象和调用构造函数。是实例化一个类最常见的方式。

Activator 实例化一个类
Activator 用以在本地或从远程创建对象类型,或获取对现有远程对象的引用。其 CreateInstance 方法创建在程序集中定义的类型的实例。

  1. GP工具输入参数问题

    目前遇到的多要素输入主要有两种方式

    方式一:使用IGpValueTableObject

    IGpValueTableObject gpValueTableObject = new GpValueTableObjectClass();gpValueTableObject.SetColumns(1);object o1 = featureClass1;object o2 = featureClass2;
    intersect.in_features = intersect_GPValueTableObject;
    

    方式二:使用’;'作为分隔符输入

    string inputParam_1 = gdbpath + @"\" + name;
    string inputParam_2 = gdbpath + @"\" + name;
    gp.in_features = inputParam_1+';'+inputParam_2;
    
  2. 写入JObject到json文件

    //设置将写入文件的全名(带路径)
    fp = ConfigUtil.GetConfigValue(configPath, "ResultPath") + @"\" + "台账_" + xzqType + resultName + ".json";
    //初始化一个IO流以创建文件
    System.IO.FileStream fs1 = new System.IO.FileStream(fp, FileMode.Create, FileAccess.ReadWrite);
    //设置JSON写入流的参数
    Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();serializer.Converters.Add(new Newtonsoft.Json.Converters.JavaScriptDateTimeConverter());serializer.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;serializer.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto;serializer.Formatting = Newtonsoft.Json.Formatting.Indented;
    //开始写入
    using (StreamWriter sw = new StreamWriter(fp))
    using (Newtonsoft.Json.JsonWriter writer = new Newtonsoft.Json.JsonTextWriter(sw)){serializer.Serialize(writer, res, typeof(List<LandStatisticsXZQ>));}
    
  3. ArcGIS Server REST API

    URL http://<layer-url>/query
    Parent Resource Layer / Table
    Required Capability Data

    重要的几个主要参数:

    参数 说明
    Format: html、json、kmz、amf格式可选,决定了返回数据的格式
    Where: 筛选条件,语法类似于SQL,默认是1=1
    Out Fields: 输出的字段,默认是*
    Return IDs Only: 默认false,如果改为true则返回所有的objectid方便分块查询
    Return Count Only: 默认false,如果改为true则返回总数
  4. 动态规划(Dynamic Programming)

    动态规划算法通常基于一个递推公式及一个或多个初始状态。当前子问题的解将由上一次子问题的解推出。

    动态规划和分治法相似,都是通过组合子问题的解来求解原问题。分治法将问题划分成互不相交的子问题,递归求解子问题,再将他们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的子子问题。在这种情况下,分治算法会做出许多不必要的工作,它会反复的求解那些公共子问题。而动态规划算法对每个子子问题只求解一次,将结果保存到表格中,从而无需每次求解一个子子问题都要重新计算。

    第一种方法是 带备忘的自顶向下法

    此方法依然是按照自然的递归形式编写过程,但过程中会保存每个子问题的解(通常保存在一个数组中)。当需要计算一个子问题的解时,过程首先检查是否已经保存过此解。如果是,则直接返回保存的值,从而节省了计算时间;如果没有保存过此解,按照正常方式计算这个子问题。我们称这个递归过程是带备忘的。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace 钢条切割问题_带备忘的自顶向下法_动态规划_
    {class Program{static void Main(string[] args){//int n = 5;//我们要切割售卖的钢条的长度int[] result = new int[11];int[] p = { 0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30 };//索引代表 钢条的长度,值代表价格Console.WriteLine(UpDown(0, p, result));Console.WriteLine(UpDown(1, p, result));Console.WriteLine(UpDown(2, p, result));Console.WriteLine(UpDown(3, p, result));Console.WriteLine(UpDown(4, p, result));Console.WriteLine(UpDown(5, p, result));Console.WriteLine(UpDown(6, p, result));Console.WriteLine(UpDown(7, p, result));Console.WriteLine(UpDown(8, p, result));Console.WriteLine(UpDown(9, p, result));Console.WriteLine(UpDown(10, p, result));Console.ReadKey();}//带备忘的自顶向下public static int UpDown(int n, int[] p, int[] result)//求得长度为n的最大收益{if (n == 0) return 0;if (result[n] != 0){return result[n];}int tempMaxPrice = 0;for (int i = 1; i < n + 1; i++){int maxPrice = p[i] + UpDown(n - i, p, result);if (maxPrice > tempMaxPrice)tempMaxPrice = maxPrice;}result[n] = tempMaxPrice;return tempMaxPrice;}}
    }
    

    第二种方法是 自底向上法

    首先恰当的定义子问题的规模,使得任何问题的求解都只依赖于更小的子问题的解。因而我们将子问题按照规模排序,按从小到大的顺序求解。当求解某个问题的时候,它所依赖的更小的子问题都已经求解完毕,结果已经保存。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace 钢条切割问题_自底向上法_动态规划算法_
    {class Program{static void Main(string[] args){int[] result = new int[11];int[] p = { 0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30 };//索引代表 钢条的长度,值代表价格Console.WriteLine(BottomUp(1, p, result));Console.WriteLine(BottomUp(2, p, result));Console.WriteLine(BottomUp(3, p, result));Console.WriteLine(BottomUp(4, p, result));Console.WriteLine(BottomUp(5, p, result));Console.WriteLine(BottomUp(6, p, result));Console.WriteLine(BottomUp(7, p, result));Console.WriteLine(BottomUp(8, p, result));Console.WriteLine(BottomUp(9, p, result));Console.WriteLine(BottomUp(10, p, result));Console.ReadKey();}public static int BottomUp(int n, int[] p, int[] result){for (int i = 1; i < n + 1; i++){//下面取得 钢条长度为i时最大的收益int tempMaxPrice = -1;for(int j = 1; j <= i; j++){int maxPrice = p[j] + result[i - j];if (maxPrice > tempMaxPrice)tempMaxPrice = maxPrice;}result[i] = tempMaxPrice;}return result[n];}}
    }
    
  5. 贪心算法

    对于许多最优化问题,使用动态规划算法来求最优解有些杀鸡用牛刀了,可以使用更加简单、更加高效的算法。贪心算法就是这样的算法,它在每一步做出当时看起来最佳的选择。也就是说它总是做出局部最优的选择,从而得到全局最优解。

    对于某些问题并不保证得到最0优解,但对很多问题确实可以求得最优解。

    对于任何非空的活动集合S,假如am是S中结束时间最早的活动,则am一定在S的某个最大兼容活动子集中

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace 活动选择问题_贪心算法_递归解决_
    {class Program{static int[] s = { 0, 1, 3, 0, 5, 3, 5, 6, 8, 8, 2, 12 };static int[] f = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };public static List<int> ActivitySelection(int startActivityNumber, int endActivityNumber, int startTime, int endTime) {if (startActivityNumber > endActivityNumber || startTime >= endTime)return new List<int>();//找到结束时间最早的活动int tempNumber = 0;for (int number = startActivityNumber; number <= endActivityNumber; number++){if(s[number]>=startTime && f[number] <= endTime){tempNumber = number;break;}}List<int> list = ActivitySelection(tempNumber + 1, endActivityNumber, f[tempNumber], endTime);list.Add(tempNumber);return list;}static void Main(string[] args){List<int> list = ActivitySelection(1, 11, 0, 24);foreach (int temp in list){Console.WriteLine(temp);}Console.ReadKey();}}
    }
    

GIS开发进阶之路(十三) Activator和new的区别、GP工具输入参数问题、写入JObject到json文件、ArcGIS Server REST API、动态规划、贪心算法相关推荐

  1. GIS开发进阶之路(十四) ArcEngine打开cad文件的五种方法、ArcGIS Engine错误码

    ArcEngine打开cad文件的几种方法 方法一.通过遍历CAD数据集,依次加载中点线面注记等图层,所加载的数据均为一个独立的图层. IWorkspaceFactory pWorkspaceFact ...

  2. GIS开发进阶之路(十二) 加载栅格、根据WKID进行投影、部分CENTOS指令

    加载栅格.根据WKID进行投影 通过自定义WKID json对应文件,使用projectiontool来定义投影类型 //获取WKID int WKID = ProjectionTool.WKID2E ...

  3. 高级Android开发进阶之路,你需要掌握的几个关键技术!

    Android开发已经凉了吗? 这两年有很多人有这方面的疑惑,在大方向讲,任何一个行业都有有一个成长周期,Android经历了2011-13年的野蛮生长后,已经进入了成熟期,这个阶段绝大部分企业对An ...

  4. 学习3D游戏开发进阶之路

    笔者从事IT行业15年了,一直奋斗在一线编程,从普通程序员逐步成长到上市公司技术总监,目前在创业公司担任技术合伙人,主要负责公司整个项目团队的技术管理.在网上或者论坛上很多同学请教过我关于如何学习3D ...

  5. 指尖上行--移动前端开发进阶之路(读书笔记)----1.3常用库和框架

    chapter 1 移动页面开发 页面布局 页面调试 常用库和框架 1.3 常用库和框架 1.3.1 jQuery Mobile jQuery Mobile是jQuery 框架的一个组件(而非jque ...

  6. 【进阶之路】Mysql与Oracle的区别

    导言 大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西.知识越分享越值钱,我这段时间总结 ...

  7. 11年程序员给本科、研究生应届生以及准备从事后台开发同学的建议,学习进阶之路

    校招形势 目前校招招聘中,后台开发或服务器开发的岗位需求一度火热,甚至超过了算法岗.不少同学从诸神黄昏的算法岗战场上退下,转向更偏向工程能力的后台开发岗,从而造成后台开发岗位竞争的大爆发. 后台开发工 ...

  8. 【API进阶之路】API带来的微创新,打动投资人鼓励我创业

    摘要:怎么帮助创作者提高视频的推荐量呢?我发现了:视频的封面图非常重要. 上回说到,老板一拍脑门,交代了一个新项目:小成本开发一款短视频剪辑工具([<[API进阶之路]人少钱少需求多的新项目该怎 ...

  9. 【API进阶之路】做OCR文字识别,谁说必须要有AI工程师?

    摘要:有些功能还真不能光凭自己的直觉和认识,来自一线的声音才是最真实的用户需求.比方说名片录入的需求. 在公司技术委员会副主席这个位置上干了有几个月了,期间,我一方面给研发团队整理各种文档资料,做技术 ...

  10. ZYNQ进阶之路13--自定义AXI-FULL IP实现PS和PL双向高速通讯

    ZYNQ进阶之路13--自定义AXI-FULL IP实现PS和PL双向高速通讯 导语 实现步骤 结语 导语 不好意思,这篇博文又来晚了,是繁忙阻碍了博主博客的更新,其实博主想要有好多关于技术的话要说, ...

最新文章

  1. Eclipse工作空间还原到最初状态
  2. TurboMail邮件系统通过涉密信息系统产品认定
  3. Django 3.2.5博客开发教程:体验django模板
  4. Exchange Server 2007迁移Exchange Server 2010 (16)--- OWA重定向
  5. Linux学习总结(81)—— Linux 权限详解
  6. AI 改写《权力的游戏》结局,和编剧比谁更烂?
  7. 渗透测试为什么要重基础、重实践?
  8. 获得PMP认证的过程及心路历程
  9. (转)注意力机制(Attention Mechanism)在自然语言处理中的应用
  10. 李宏毅机器学习笔记——深度学习
  11. Win10易升-在线升级工具
  12. c语言能编写嵌入式程序吗,嵌入式c语言编程之嵌入式c语言编程思想
  13. 树莓派Python读取DHT11温湿度数据
  14. 简述网桥的特点_网桥的工作原理和特点是什么呢?
  15. 才智杂志社才智杂志才智编辑部2022年第36期目录
  16. Android 10.0热点为Enhanced Open模式时不允许WiFI和热点同时开启代码流程梳理
  17. c语言程序结构设计的心得,写给新手 选择结构程序设计总结
  18. 帝国cms php序号,帝国cms教程:如何使用灵动标签生成带序号的列表
  19. Python对阿里云物联网MQTT设备接入端开发
  20. Java小白入门200例50之Java判断闰年并打印月份对应的天数

热门文章

  1. 机器学习、数据挖掘、神经网络、人工智能和模式识别之间,主要是什么关系
  2. 基于Java发送邮件
  3. Python通过Socket实现QQ聊天功能
  4. 3V转1.8V三极管稳压IC
  5. pyautogui入门学习之消息盒子
  6. html右侧划出层,点击按钮网页居中滑出覆盖层和消息提示盒子
  7. 基于python和tesseract库的中英文识别(OCR)
  8. 《彼得·林奇的成功投资》书中的精髓:如何选择帮助我们实现资产翻10倍的股票?以及如何避开让我们血本无归的股票?
  9. 自制太阳能手机充电器
  10. linux各种桌面系统图片,四大Linux图形界面赏析:KDE、Gnome、Xfce、LXDE