精华内容
下载资源
问答
  • 数组转DataTable通用类

    2009-06-13 10:43:00
    在最近做的一个案子里,需要绑定实体数组比如Materiel[]绑定到界面(winform/webform都有),虽然可以直接绑定数组到GridView,但排序,过滤,查找等操作数组里不是很方便。所以想借用DataTable做数据源。最简单的...

    在最近做的一个案子里,需要绑定实体数组比如Materiel[]绑定到界面(winform/webform都有),虽然可以直接绑定数组到GridView,但排序,过滤,查找等操作在数组里不是很方便。所以想借用DataTable做数据源。

    最简单的方法就是手动建一个DataTable。为每个Materiel的property建一个Column,然后指明其数据类型。建好Table之后,循环为每个Materiel创建一个新行。如果多有几个界面,虽然做起来都差不多,但代码很难重用。

    另外数据都是从WebService获取,form不允许直接访问DB,所以也不能通过ADO.net获取DataTable。

    经过一段时间的考量后决定见一个专用的Utility类EntityCollectionsConvert,接口为

    DataTable ToDataTable(object[] entitys);

    DataTable ToDataTable<T>(List<T> entitys)

    实现的原理也比较简单

    1.将判断entitys不为空;

    2.取出entitys的所有property

    3.在DataTable中为每个property添加一列(包括元素类型)

    4.为每个entity添加一行。

    5.自动生成单元测试,测试,添加到项目中

     

    展开全文
  • JNI数组操作

    2019-06-25 16:22:00
    在Java中数组分为两种: ...一个能通用于两种不同类型数组的函数: GetArrayLength(jarray array); 首先来看一下怎么处理基本类型的数组: (1) GetArrayElements(Array arr , jboolean* isCopide); 这函数...

    Java中数组分为两种:

    1.基本类型数组

    2.对象类型(Object[])的数组(数组中存放的是指向Java对象中的引用)

    一个能通用于两种不同类型数组的函数:

    GetArrayLength(jarray array);

     

    首先来看一下怎么处理基本类型的数组:

    (1) GetArrayElements(Array arr , jboolean* isCopide);

    这类函数可以把Java基本类型的数组转换到C/C++中的数组,有两种处理方式,一种是拷贝一份传回本地代码,另一个是把指向Java数组的指针直接传回到本地代码中,处理完本地化的数组后,通过ReleaseArrayElements来释放数组

     

    (2) ReleaseArrayElements(Array arr , * array , jint mode)

    用这个函数可以选择将如何处理Java跟C++的数组,是提交,还是撤销等,内存释放还是不释放等

    mode可以取下面的值:

    0 :对Java的数组进行更新并释放C/C++的数组

    JNI_COMMIT :对Java的数组进行更新但是不释放C/C++的数组

    JNI_ABORT:对Java的数组不进行更新,释放C/C++的数组

     

    (3) GetPrimittiveArrayCritical(jarray arr , jboolean* isCopied);

    (4) ReleasePrimitiveArrayCritical(jarray arr , void* array , jint mode);

    也是JDK1.2出来的,为了增加直接传回指向Java数组的指针而加入的函数,同样的也会有同GetStringCritical的死锁的问题

     

    (5) GetArrayRegion(Array arr , jsize start , jsize len , * buffer);

    在C/C++预先开辟一段内存,然后把Java基本类型的数组拷贝到这段内存中,这个方法和之前拷贝字符串的GetStringRegion方法的原理是类似的

     

    (6) SetArrayRegion(Array arr , jsize start , jsize len , const * buffer);

    把Java基本类型的数组中的指定范围的元素用C/C++的数组中的元素来赋值

     

    (7) Array NewArray(jsize sz)

    指定一个长度然后返回相应的Java基本类型的数组

     

    在来看一下怎么处理对象型数组

    JNI没有提供直接把Java的对象类型数组(Object[])直接转到C++中的Object[]数组的函数,而是直接通过Get/SetObjectArrayElement这样的函数来对Java的Object[]数组进行操作由于去的对象数组没有进行拷贝,所以不需要释放任何资源

    NewObjectArray可以通过指定长度跟初始值来创建某个类的数组

     

    下面来看一下例子:操作两种类型的数组

    Java中的代码:

     

    [java] view plaincopy在CODE上查看代码片派生到我的代码片

      1. package com.jni.demo;
      2. public class JNIDemo {
      3. //定义一个int型数组
      4. int[] arrays = {4,3,12,56,1,23,45,67};
      5. //定义Father对象数组
      6. Father[] objArrays = {new Father(),new Father(),new Father()};
      7. //定义一个本地方法
      8. public native void callCppFunction();
      9. public static void main(String[] args)throws Exception{
      10. //调用动态链接库
      11. System.loadLibrary("JNIDemo");
      12. JNIDemo jniDemo = new JNIDemo();
      13. jniDemo.callCppFunction();
      14. }
      15. }

      16. C++中的代码:

         

         

        [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
        1. #include
        2. #include"com_jni_demo_JNIDemo.h"
        3. #include
        4. using namespace std;
        5. JNIEXPORT void JNICALL Java_com_jni_demo_JNIDemo_callCppFunction (JNIEnv * env, jobject obj)
        6. {
        7. //获取Java中数组属性arrays的id
        8. jfieldID fid_arrays = env->GetFieldID(env->GetObjectClass(obj),"arrays","[I");
        9. //获取Java中数组属性arrays的对象
        10. jintArray jint_arr = (jintArray)env->GetObjectField(obj,fid_arrays);
        11. //获取arrays对象的指针
        12. jint* int_arr = env->GetIntArrayElements(jint_arr,NULL);
        13. //获取数组的长度
        14. jsize len = env->GetArrayLength(jint_arr);
        15. //打印数组中的值
        16. cout<<"数组的值为:";
        17. for(int s =0;s<len;s++){ <li="" class="alt"> cout<<int_arr[s]<<','; <li=""> }
        18. cout<<endl; <li="">
        19. //新建一个jintArray对象
        20. jintArray jint_arr_temp = env->NewIntArray(len);
        21. //获取jint_arr_temp对象的指针
        22. jint* int_arr_temp = env->GetIntArrayElements(jint_arr_temp,NULL);
        23. //计数
        24. jint count = 0;
        25. //偶数位存入到int_arr_temp内存中
        26. for(jsize j=0;j<len;j++){ <li="" class="alt"> if(j%2==0){
        27. int_arr_temp[count++] = int_arr[j];
        28. }
        29. }
        30. //打印int_arr_temp内存中的数组
        31. cout<<"数组中位置是偶数的值为:";
        32. for(jsize k=0;k<count;k++){ <li=""> cout<<int_arr_temp[k]<<','; <li="" class="alt"> }
        33. cout<<endl; <li="" class="alt">
        34. //将数组中一段(0-2)数据拷贝到内存中,并且打印出来
        35. jint* buffer = new jint[len];
        36. //获取数组中从0开始长度为3的一段数据值
        37. env->GetIntArrayRegion(jint_arr,0,3,buffer);
        38. cout<<"打印数组中0-3一段值:";
        39. for(int l=0;l<3;l++){
        40. cout<<buffer[l]<<','; <li="" class="alt"> }
        41. cout<<endl; <li="" class="alt">
        42. //将数组中的一段(3-7)设置成一定的值,并且打印出来
        43. jint* buffers = new jint[4];
        44. for(int n=0;n<4;n++){
        45. buffers[n] = n+1;
        46. }
        47. //将buffers这个数组中值设置到数组从3开始长度是4的值中
        48. env->SetIntArrayRegion(jint_arr,3,4,buffers);
        49. //从新获取数组指针
        50. int_arr = env->GetIntArrayElements(jint_arr,NULL);
        51. cout<<"数组中3-7这段的值变成了:";
        52. for(int m=0;m<len;m++){ <li="" class="alt"> cout<<int_arr[m]<<','; <li=""> }
        53. cout<<endl; <li="">
        54. //调用C++标准库中的排序方法sort(...),传递一个数组的开始指针和结束指针
        55. std::sort(int_arr,int_arr+len);
        56. //迭代打印数组中的元素
        57. cout<<"数组排序后的结果:";
        58. for(jsize i=0;i<len;i++){ <li=""> cout<<int_arr[i]<<','; <li="" class="alt"> }
        59. cout<<endl; <li="" class="alt"> //释放数组指针
        60. env->ReleaseIntArrayElements(jint_arr,int_arr,JNI_ABORT);
        61. //获取Java中对象Father数组属性的id
        62. jfieldID fid_obj_arrays = env->GetFieldID(env->GetObjectClass(obj),"objArrays","[Lcom/jni/demo/Father;");
        63. //获取Java中对象数组Father属性objArrays的对象
        64. jobjectArray jobj_arr = (jobjectArray)env->GetObjectField(obj,fid_obj_arrays);
        65. //从对象数组中获取索引值为1的对象Father
        66. jobject jobj = env->GetObjectArrayElement(jobj_arr,1);
        67. //获取Father对象的class对象
        68. jclass clazz_father = env->GetObjectClass(jobj);
        69. //获取Father对象中的function方法的id
        70. jmethodID id_father_function = env->GetMethodID(clazz_father,"function","()V");
        71. //调用Father对象中的function方法
        72. env->CallVoidMethod(jobj,id_father_function);
        73. //在本地创建一个大小为10的对象数组,对象的初始化都是jobj,也就是方法的第三个参数
        74. jobjectArray jobj_arr_temp = env->NewObjectArray(10,env->GetObjectClass(jobj),jobj);
        75. //获取本地对象数组中第4个对象
        76. jobject jobj_temp = env->GetObjectArrayElement(jobj_arr_temp,3);
        77. //调用Father对象中的function方法
        78. env->CallVoidMethod(jobj_temp,id_father_function);
        79. }

        80. 在Eclipse编译运行结果如下:

           

          不要以为这就结束了,后面还有很多内容呀!

    转载于:https://www.cnblogs.com/cy1993/p/11083509.html

    展开全文
  • 需要绑定实体数组比如Materiel[]绑定到界面(winform/webform都有),虽然可以直接绑定数组到GridView,但排序,过滤,查找等操作数组里不是很方便。所以想借用DataTable做数据源。 最简单的方法就是手动建一个...


       需要绑定实体数组比如Materiel[]绑定到界面(winform/webform都有),虽然可以直接绑定数组到GridView,但排序,过滤,查找等操作在数组里不是很方便。所以想借用DataTable做数据源。

       最简单的方法就是手动建一个DataTable。为每个Materiel的property建一个Column,然后指明其数据类型。建好Table之后,循环为每个Materiel创建一个新行。如果多有几个界面,虽然做起来都差不多,但代码很难重用。

       另外数据都是从WebService获取,form不允许直接访问DB,所以也不能通过ADO.net获取DataTable。

      经过一段时间的考量后决定见一个专用的Utility类EntityCollectionsConvert,接口为

     

    DataTable ToDataTable(object[] entitys);

    DataTable ToDataTable<T>(List<T> entitys)

    实现的原理也比较简单

    1.将判断entitys不为空;

    2.取出entitys的所有property

    3.在DataTable中为每个property添加一列(包括元素类型)

    4.为每个entity添加一行。

    5.自动生成单元测试,测试,添加到项目中

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Reflection;

    namespace WindowsFormsApplication13
    {
        class Class1
        {

            public static DataTable ToDataTable<T>(List<T> entitys)
            {

                //检查实体集合不能为空
                if (entitys == null || entitys.Count < 1)
                {
                    throw new Exception("需转换的集合为空");
                }

                //取出第一个实体的所有Propertie
                Type entityType = entitys[0].GetType();
                PropertyInfo[] entityProperties = entityType.GetProperties();

                //生成DataTable的structure
                //生产代码中,应将生成的DataTable结构Cache起来,此处略
                DataTable dt = new DataTable();
                for (int i = 0; i < entityProperties.Length; i++)
                {
                    dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
                }

                //将所有entity添加到DataTable中
                foreach (object entity in entitys)
                {
                    //检查所有的的实体都为同一类型
                    if (entity.GetType() != entityType)
                    {
                        throw new Exception("要转换的集合元素类型不一致");
                    }
                    object[] entityValues = new object[entityProperties.Length];
                    for (int i = 0; i < entityProperties.Length; i++)
                    {
                        entityValues[i] = entityProperties[i].GetValue(entity, null);

                    }
                    dt.Rows.Add(entityValues);
                }
                return dt;
            }


        }
    }

     

    展开全文
  • 在最近做的一个案子里,需要绑定实体数组比如Materiel[]绑定到界面(winform/webform都有),虽然可以直接绑定数组到GridView,但排序,过滤,查找等操作数组里不是很方便。所以想借用DataTable做数据源。 最...

        在最近做的一个案子里,需要绑定实体数组比如Materiel[]绑定到界面(winform/webform都有),虽然可以直接绑定数组到GridView,但排序,过滤,查找等操作在数组里不是很方便。所以想借用DataTable做数据源。

       最简单的方法就是手动建一个DataTable。为每个Materiel的property建一个Column,然后指明其数据类型。建好Table之后,循环为每个Materiel创建一个新行。如果多有几个界面,虽然做起来都差不多,但代码很难重用。

       另外数据都是从WebService获取,form不允许直接访问DB,所以也不能通过ADO.net获取DataTable。

      经过一段时间的考量后决定见一个专用的Utility类EntityCollectionsConvert,接口为

    DataTable ToDataTable(object[] entitys);

    DataTable ToDataTable<T>(List<T> entitys)

    实现的原理也比较简单

    1.将判断entitys不为空;

    2.取出entitys的所有property

    3.在DataTable中为每个property添加一列(包括元素类型)

    4.为每个entity添加一行。

    5.自动生成单元测试,测试,添加到项目中

    ContractedBlock.gifExpandedBlockStart.gifpublic static DataTable ToDataTable(List entitys)
     1  public static DataTable ToDataTable<T>(List<T> entitys)
     2     {
     3         
     4         //检查实体集合不能为空
     5         if (entitys ==null|| entitys.Count<1)
     6         {
     7             throw new Exception("需转换的集合为空");            
     8         }
     9         
    10         //取出第一个实体的所有Propertie
    11         Type entityType= entitys[0].GetType();
    12         PropertyInfo[] entityProperties= entityType.GetProperties();
    13         
    14         //生成DataTable的structure
    15         //生产代码中,应将生成的DataTable结构Cache起来,此处略
    16         DataTable dt = new DataTable();        
    17         for (int i = 0; i < entityProperties.Length; i++)
    18         {
    19             dt.Columns.Add(entityProperties[i].Name,entityProperties[i].PropertyType);
    20         }
    21 
    22         //将所有entity添加到DataTable中
    23         foreach (object entity in entitys)
    24         {
    25             //检查所有的的实体都为同一类型
    26             if (entity.GetType()!=entityType)
    27             {
    28                 throw new Exception("要转换的集合元素类型不一致"); 
    29             }
    30             object[] entityValues = new object[entityProperties.Length];
    31             for (int i = 0; i < entityProperties.Length; i++)
    32             {
    33                 entityValues[i] = entityProperties[i].GetValue(entity, null);
    34 
    35             }
    36             dt.Rows.Add(entityValues);
    37         }
    38         return dt; 
    39     }

    转载于:https://www.cnblogs.com/shinn/archive/2008/11/12/1332323.html

    展开全文
  • 创建一个通用数组类模板文件一、创建.hpp文件二、深拷贝与浅拷贝三、代码 一、创建.hpp文件 二、深拷贝与浅拷贝 浅拷贝:简单的赋值拷贝操作 深拷贝:在堆区重新申请空间,进行拷贝操作 如果只是对指针对象进行...
  • java中数组数组元素的相关操作

    千次阅读 2019-06-12 15:19:03
    数组及相关方法 数组简介: 数组是一种重要的数据结构,在很多语言中都非常重要,并且像 栈,链表这些实现的 基础就是数组,更能看出数组的重要性。 数组的声明: 使用数组的前提就是声明数组变量: 通用...
  • STL动态数组类

    2016-06-27 23:45:57
    是一个模板,提供了动态数组通用功能,使用时要包含头文件#include 在数组末尾添加元素所需的时间是固定的,即在末尾插入元素的所需时间不随数组大小而异,在末尾删除元素也如此; 在数组中间添加或删除元素所...
  • 这个例子就是自定义一个数组模板,需要实现数组的一些常用操作。例如拷贝,有参构造,查找,删除等。 1.自定义数组类需求 模板案例描述:实现一个通用数组类,要求如下 1)可以对内置数据类型以及自定义...
  • numpy支持运算符操作,运算符看作是运算函数的简写。 从功能上分类,通用函数分为算术计算函数,双曲三角函数,位运算,比较运算符,弧 度角度转换等。 更加复杂的通用函数放在scipy.special模块下,如果需要,可以...
  • 在文章开头,我们先看看工具类通用的特征: 构造器必须是私有的。这样的话,工具就无法被 new 出来,因为工具在使用的时候,无需初始化,直接使用即可,所以不会开放出构造器出来。 工具的工具方法必须被 ...
  • 二维数组操作运算

    2012-12-10 22:16:21
    //编写一个通用程序,求出二维数组(行数和列数必须相等)的非对角线元素之和,即求 //两条对角线之外的元素之和。(没有使用的方法) /*#include using namespace std; int main() {  int num1;//行数与列数...
  • 可能有时候我们需要将一些同类型的数组进行合并成一个数组,传统的方法真的很复杂,但是可以写一个通用的工具,不就什么都解决了;其实我也看到网上有很多关于数组合并的,那些什么的我就不用了,直接上我的这个了吧;...
  • 对象类型(Object[])的数组(数组中存放的是指向Java对象中的引用)一个能通用于两种不同类型数组的函数:GetArrayLength(jarray array);首先来看一下怎么处理基本类型的数组:(1) GetArrayElements(Array arr , jboolean...
  • 他提供了对集合对象进行基本操作通用接口方法,Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。java.util.Collections是一个包装。它包含各种有关集合操作的静态多态方法,此类不是实例化...
  • CommonMethod(通用操作方法 1 根据列名字符串数组,创建自定义DataTable CreateSelfDataTable(String[] sList) 2 DES加密解密 3 webform后台js弹层 4 winform后台弹层封装 5 常用正则表达式验证
  • 我有一个ClassClass ClassO....调用的例程中,其中O是通用类参数.我找不到如何执行此操作.我特别需要O [](而不是ArrayList O或类似的东西),因为我需要经常在循环体内获取它的元素,这对我算法的执行时间很重要....
  • 在.Net开发中,我们会遇到字节数组和图片之间转换,为了方便它们之间的转换,我们封装了一个通用的转换 ByteImageConvert,轻松搞定字节数组和图片之间转换操作。ByteImageConvert 可以把Image对象转换为Byte数组...
  • 对JSON解码后得到PHP数组,对PHP数组进行你所谓的CRUD操作,就非常方便了.比如:在数组开头插入和删除元素用:array_unshift/array_shift在数组末尾插入和删除元素用:array_push/array_pop在数组中间插入和删除元素用:...
  • 对象类型(Object[])的数组(数组中存放的是指向Java对象中的引用)一个能通用于两种不同类型数组的函数:GetArrayLength(jarray array);首先来看一下怎么处理基本类型的数组:(1) GetArrayElements(Array arr , jboolean...
  • 在.Net开发中,我们会遇到字节数组和图片之间转换,为了方便它们之间的转换,我们封装了一个通用的转换 ByteImageConvert,轻松搞定字节数组和图片之间转换操作。ByteImageConvert 可以把Image对象转换为Byte数组...
  • 编写一个通用程序,求出二位数组(行数和列数必须相等)的非对角线的元素之和,试建立MATRIX完成上述功能 #include<iostream> using namespace std; class MATRIX { public: void mATRIX(); ...
  • C#公共通用类

    2018-09-07 16:12:21
    byte字节数组操作辅助(BytesTools.cs) 处理数据类型转换,数制转换、编码转换相关的(ConvertHelper.cs) CRC校验辅助(CRCUtils.cs) 枚举操作公共(EnumHelper.cs) 身份证操作辅助(IDCardHelper.cs) ...
  • C#公共类通用类非常齐全

    热门讨论 2013-04-11 16:25:00
    byte字节数组操作辅助(BytesTools.cs) 处理数据类型转换,数制转换、编码转换相关的(ConvertHelper.cs) CRC校验辅助(CRCUtils.cs) 枚举操作公共(EnumHelper.cs) 身份证操作辅助(IDCardHelper.cs) ...
  • Excel输出打印模块,将DataTable数据写入Excel文件(自动分页),将DataTable数据写入Excel文件(不分页),将DataTable数据写入Excel文件(自动分页,并指定要合并的列索引) , 将二维数组数据写入Excel文件(自动...
  • PHP数组和对象的区别

    千次阅读 2018-11-23 15:54:14
    有时候会思考一个问题 php中...如果你想在操作的数据里加个通用的方法,比如返回值是加密的,或者其它等等功能,这时候可以考虑写个,返回数据的时候使用对象的相应方法即可得到想要的数据。   如果从框架设计...
  • *Symbian操作系统还提供了固定长度的数组类来替代动态数组*当数组元素在编译时已知时,这种固定数组非常有用*TFixedArray封装了标准的固定长度C++数组,并且加入了边界检查*与通用C++数组相比,TFixedArray提供了...
  • js中数组各种遍历方法的区别 平时无论是使用数组还是对象,遍历都是...1、for循环用于循环执行一定次数的代码块,是一个js语句而不是方法,很通用的一种遍历方法,既可以用来循环数组也可以用来循环类数组的数据结构。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 833
精华内容 333
关键字:

数组操作通用类