精华内容
下载资源
问答
  • .Net 4.0特性 Tuple元组

    2019-09-27 20:47:04
    Tuple 字面意思:元组。是.net4.0增加的新特性,是干什么的呢?总结一句,个人觉得这个东西 就是用来在有返回很多种类型的值时可以用到。它提供了8种类型的Tuple,直接看最复杂的那种(其实不是复杂,就是参数比别人...

    Tuple 字面意思:元组。是.net4.0增加的新特性,是干什么的呢?总结一句,个人觉得这个东西 就是用来在有返回很多种类型的值时可以用到。它提供了8种类型的Tuple,直接看最复杂的那种(其实不是复杂,就是参数比别人多而已,原理是完全一致的),原理不讲太多,看下这个类的结构就知道什么原理了。

    [Serializable, __DynamicallyInvokable]
    public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
    {
        // Fields
        private readonly T1 m_Item1;
        private readonly T2 m_Item2;
        private readonly T3 m_Item3;
        private readonly T4 m_Item4;
        private readonly T5 m_Item5;
        private readonly T6 m_Item6;
        private readonly T7 m_Item7;
        private readonly TRest m_Rest;
    
        // Methodspublic Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest);
        public override bool Equals(object obj);
        public override int GetHashCode();
        int IStructuralComparable.CompareTo(object other, IComparer comparer);
        bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer);
        int IStructuralEquatable.GetHashCode(IEqualityComparer comparer);
        int IComparable.CompareTo(object obj);
        int ITuple.GetHashCode(IEqualityComparer comparer);
        string ITuple.ToString(StringBuilder sb);
        public override string ToString();
    
        // Properties
        [__DynamicallyInvokable]
        public T1 Item1 { [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get; }
       此处省略:T2到T6的定义,因为完全一致,为了减少文章篇幅。
        [__DynamicallyInvokable]
        public T7 Item7 { [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get; }
        [__DynamicallyInvokable]
        public TRest Rest { [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get; }//注意这个最后一个参数的类型,其实它是Tupple类型的
        int ITuple.Size { get; }
    }
    
     
    Tuple<int, string, bool, char, ClassStyle, Dictionary<int,string>, IEnumerable<int> , TRest> tuple=new
    Tuple(1,"string",true,'1',new Student(),.....,Tuple<任意类型>);
    用法就是在函数返回的时候,可以new一个这样的类型的对象,对其各个属性赋值,这样就可以返回非常多类型的数据,取得返回的值,就是用这个tuple对象.Item1,就可以获得相应类型的值,比如在这里我们tuple.Item1的值是1,tuple.Item2的值是“string”,以此类推。当然这些Item是只读的,不能对其进行赋值操作。为我们提供了很大的方便。以上是创建Tuple的方法之一,接下来说下另一个方法,先看下这个Tuple静态类:
    [__DynamicallyInvokable]
    public static class Tuple
    {
        // Methods
        internal static int CombineHashCodes(int h1, int h2);internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8);
        [__DynamicallyInvokable]
        public static Tuple<T1> Create<T1>(T1 item1);
    此处省略:T2到T6的定义,因为完全一致,为了减少文章篇幅。
    [__DynamicallyInvokable]

    public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8); }

    其实代码更多,当然区别也是参数个数不一致,原理还是一样的,这里只写出两个。

    看一眼就知道Create<....>这个方法,没错我们也可以通过Tuple这个静态类中的Create静态方法来创建不定个数参数的Tuple对象,举个例子:

    var trest = Tuple.Create<int>(8);
    var t8 = Tuple.Create<int, int, int, int, int, int, int, Tuple<int>>(1, 2, 3, 4, 5, 6, 7, trest);

    第八个参数 一定是要Tuple类型的,当然只有这个需要8个参数的Tuple类型最后一个参数需要Tuple类型,而其他几个(这里指1~7个参数的Tuppe)都是任意类型都可以。可能是为了用于扩展更多的参数,因为Tuple毕竟只是提供了最多8种不同参数的构造方法。其实这个东西就是为了方便我们可以返回多个不同类型的值。

    
    

    转载于:https://www.cnblogs.com/LJP-JumpAndFly/p/4108409.html

    展开全文
  • 从本文开始进入C++标准库...作者英语一般,在写文章之前首先查了一下tuple意思,百度翻译给出的结果是:元组,数组。说实话没懂。再查英语词典,给出的解释是: a structure of data that has several parts。...

    从本文开始进入C++标准库特殊设施部分,所谓特殊设施,应该就是C++Primer作者从C++标准库中选出的,认为值得单独介绍的部分。首先介绍tuple模板。

    什么是tuple

    作者英语一般,在写文章之前首先查了一下tuple的意思,百度翻译给出的结果是:元组,数组。说实话没懂。再查英语词典,给出的解释是:

    structure of data that has several parts。

    这个好理解,就是包含多个部分的数据结构

    初始化

    tuple初始化有几种方式,首先是默认初始化。这种情况下,tuple的每个成员都被默认初始化。

     

    也可以在初始化时指定各个成员的值。下面代码中第一种方式使用的是tuple的构造函数,第二种方式使用的是初始化列表。

    使用make_tuple函数配合auto类型指示符,还可以更简洁地初始化tuple。

     

    访问tuple成员

    对象建立之后,就可以访问它的各个成员了。访问的形式比较特别,是一个函数模板。也许不大习惯代码的形式,其实只要理解以下几点即可。

    1. 函数参数是tuple对象。

    2. 模板参数是成员的索引,而且必须是const expression类型。

    3. 虽然模板参数还有一个是tuple对象的类型,但由于编译器可以通过tuple对象推断,实际上并不需要输入。

    代码如下:

    输出结果参照注释。

     

    取得成员的数量和类型

    如果tuple数据的生成者和使用者不在一个模块中,可能就需要对数据进行某种检查,这时就很可能希望知道成员的数量或者类型。直接上代码。

    从上述代码可以看到:

    1.tuple_size,tuple_element的输入都需要tuple对象的类型,而不是对象本身。

    2.取得成员的类型可以使用tuple_element,也可以使用decltype结合get取得。

     

    作者观点

    相信每个程序员都会遇到不想给变量命名的情况,要不然代码中也不会有那么多temp。当你不想给结构体命名的时候,可以选择tuple,这时连结构体成员都不需要命名。

     

    觉得本文有帮助?请分享给更多人。

    阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

    展开全文
  • 如何使用 C# 中的 Tuple

    2021-01-21 23:49:22
    首先声明的是 Tuple 不是什么新鲜概念,在编程语言 F#,Python 中早就有这个了,Tuple 是一种 有序的,有限不可变的,支持混杂类型的固定个数的 一种数据结构,有些朋友可能就想问了,这里的混杂是什么意思?...

    开局一张图,首先声明的是 Tuple 不是什么新鲜概念,在编程语言 F#,Python 中早就有这个了,Tuple 是一种 有序的,有限不可变的,支持混杂类型的固定个数的 一种数据结构,有些朋友可能就想问了,这里的混杂是什么意思? 其实就是说 Tuple 中的若干元素类型,即可以是同类型,也可以是不同类型。

    值得注意的是,Tuple 中的元素是 只读的,而且其元素的顺序也是在 Tuple 创建的时候指定好的,不能对其中的元素进行后续修改 也不能修改 Tuple 的大小。

    为什么要使用 Tuple

    下面罗列了几种使用 Tuple 的场景:

    • 如果你的方法需要返回多个值 或者 方法需要传递多个值。

    • 如果你不想为某些功能专门去定义一个类。

    • 如果你有若干个混杂元素,并且想提供对其简单的访问方式。

    上面三种情况都是 Tuple 最擅长的应用场景,值得用 Tuple 去解决。

    有些朋友可能会想到 匿名类,但仔细想想, 匿名类 也有其缺陷,比如说方法的返回值是不可能指定为匿名类型的,对吧。

    当然 Tuple 也是有缺陷的,罗列如下:

    • 当你访问 Tuple 中的元素时,你会发现只能使用 Item1, Item2, Item3 这样的形式,很显然这种太不易读了,而且一旦 Tuple 中的元素过多,维护起来也是一种负担。

    • Tuple 是引用类型不是值类型,意味着它会在 托管堆 上进行内存分配,如果 Tuple 过大并且没有很好的释放,对程序也是一个不小的性能挑战。

    C# 中使用 Tuple

    叨叨叨的说了这么多,接下来看看如何使用,在 C# 中提供了一个 Tuple 类,这个类下有一个静态方法 Create 可用来生成 Tuple 实例,顺便提一下,这个 Create 方法提供了 8 个重载方法,下面展示了这些方法签名清单。

    
    public static class Tuple
    {
        public static Tuple<T1> Create<T1>(T1 item1)
        {
            return new Tuple<T1>(item1);
        }
    
        public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
        {
            return new Tuple<T1, T2>(item1, item2);
        }
    
        public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3)
        {
            return new Tuple<T1, T2, T3>(item1, item2, item3);
        }
    
        public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4)
        {
            return new Tuple<T1, T2, T3, T4>(item1, item2, item3, item4);
        }
    
        public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
        {
            return new Tuple<T1, T2, T3, T4, T5>(item1, item2, item3, item4, item5);
        }
    
        public static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
        {
            return new Tuple<T1, T2, T3, T4, T5, T6>(item1, item2, item3, item4, item5, item6);
        }
    
        public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
        {
            return new Tuple<T1, T2, T3, T4, T5, T6, T7>(item1, item2, item3, item4, item5, item6, item7);
        }
    
        public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8)
        {
            return new Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>(item1, item2, item3, item4, item5, item6, item7, new Tuple<T8>(item8));
        }
    }
    

    接下来看看如何创建和初始化 Tuple。

                var listEmployee = new List<Tuple<int, string, string>>
                {
                  Tuple.Create(1, "Joydip Kanjilal", "INDIA"),
                  Tuple.Create(2, "Michael Stevens", "USA" ),
                  Tuple.Create(3, "Steve Barnes", "USA" )
                };
    

    一旦你的 Tuple 创建并初始化好,你可以像迭代其他集合一样迭代 Tuple,下面的代码清单展示了如何去实现。

    
                foreach (Tuple<int, string, string> tuple in listEmployee)
                {
                    Console.WriteLine(tuple.Item2);
                }
    

    下面是完整的代码清单展示了如何去 创建,初始化,迭代。

    
            static void Main(string[] args)
            {
                var listEmployee = new List<Tuple<int, string, string>>
                {
                    Tuple.Create(1, "Joydip Kanjilal", "INDIA"),
                    Tuple.Create(2, "Michael Stevens", "USA" ),
                    Tuple.Create(3, "Steve Barnes", "USA" )
                };
    
                foreach (Tuple<int, string, string> tuple in listEmployee)
                {
                    Console.WriteLine(tuple.Item2);
                }
                Console.Read();
            }
    

    你也可以创建 嵌套的 Tuple,如下代码所示:

    
            static void Main(string[] args)
            {
                var tuple = Tuple.Create(1, "Joydip Kanjilal", new Tuple<string, string>("Hyderabad", "India"));
            }
    

    译文链接:https://www.infoworld.com/article/3095242/how-to-work-with-a-tuple-in-c.html

    展开全文
  • .Net 之Tuple

    2016-05-28 16:04:00
    Tuple什么 按照Msdn 上说:提供用于创造元组对象的静态方法。从字面意思并不能理解他的作用; Tuple 是个静态类,提供8个静态泛型方法;T 可以是值类型,也可是引用类型; 使用场景 C#语言中,相信大家对ref 和out...

    Tuple是什么

    按照Msdn 上说:提供用于创造元组对象的静态方法。从字面意思并不能理解他的作用;

     

    Tuple 是个静态类,提供8个静态泛型方法;T 可以是值类型,也可是引用类型;

     

    image

    使用场景

    C#语言中,相信大家对ref 和out。一定不陌生,就是一个函数需要返回多个值的时候,我们一般都采用Ref 或者Out ;

    但是,在C# 编码最佳实践中,不建议用Ref 或者Out 来返回多个结果;这时Tuple 就派上用场了。Tuple将返回的结果打包一并返回给调用者;

    这样就相当方便;

    场景1

    在MVC或者MVVM开发中,如果一个View 需要多个ViewModel的时候, 你就可以件ViewModel 一并打包到Tuple,然后返回给View

    下面已MVC 为例, 我在这里简单设计,只是为了演示Tuple,在实际项目过程请参考最佳实际设计中。例如:

    public class UserInfoViewModel

    {

    public string UserId{get;set;}

    public  string UserName{get;set;}

    }

    public class AddressViewModel

    {

      public  string CityId{get;set;}

       public  string CityName{get;set;}

    }

    public  calss UserController:Controller

    {

    public Action UserInfo()

    {

    var  mTuple =new  Tuple<UserInfoViewModel,AddressViewModel>();

    // 构造UserInfoViewModel数据

    // 构造AddressViewModel数据

    return View(mTuple );

    }

    }

     

    场景2

    对于在数据导入的时候,我需要知道导入结果和导入失败结果;例如:

    有下面这样一个函数:

    private bool ImportData( string exlPath,out DataTable errDataTbl)

    {

    bool mImpResult=false;

    try{

    //导入操作

    }

    catch

    {

    // 记录导入错误数据行 ,将记录插入到 errDataTbl

    }

    return mImpResult;

    }

     

    但是如果使用 Tuple ,上面方法就改成:

    private  Tuple<bool,DataTable> ImportData( string exlPath)

    {

    var  mTuple =new  Tuple<bool,DataTable>();

    try{

    //导入数据操作

    }

    catch(){

    /// 记录导入错误的数据

    }

    return  mTuple ;

    }

     

    参考地址:MSDN 上Tuple类介绍

    转载于:https://www.cnblogs.com/DripRoad/p/5537661.html

    展开全文
  • 今天说一下System命名空间下的一个数据类型——Tuple,翻译过来叫“元组”,其实翻译后我也不知道什么意思,很多专有名词翻译后都不知道什么意思。 尽管不知道是什么意思,不过,我知道怎么用。 Tuple比较类似于...
  • 难道我自己多年使用的方式错了嘛,是的,你没错,我错了,哈哈,主要原因是使用Tuple的时候容易搞错对象,Tuple2的时候还知道第一个参数跟第二个参数的意思,后面多来个几参数你会记得_1._2._3._4代表的意思什么吗...
  • TypeError系列之:TypeError: 'tuple' object is not callable.

    千次阅读 多人点赞 2020-04-24 19:15:36
    tuple对象是不可调用的,这是什么意思。只有可以内部有函数对象才可以调用(call)函数,而turple是一个数据类型,它本身是不封装函数的,因此如果去通过“.”的方式去调用函数,这样的方式是错误的。 我们来看着...
  • hive种UDF UDTF UDAF 分别表示什么意思? UDF User-Defined-Function 普通函数 一进一出 UDAF User-Defined Aggregation Function 聚合函数,多进一出 collect_set(),collect_list() UDTF User-Defined ...
  • 在训练语言模型时,将经过dataloader转换后的数据,进行模型训练,将整个batch转换到gpu上时,报错,意思tuple数据结构,没有cuda属性,就是不能直接往gpu上传送。 'tuple' object has no attribute 'cuda' ...
  • SystemError: new style getargs format but argument is not a tuple 想给图片添加灰度值,莫名其妙出现这个 这个提示的意思就是说,putpixel()参数不是元组。我心想我这个需要数据格式也不是元组啊,不过既然...
  • reshape(-1,1)什么意思 numpy.reshape

    万次阅读 多人点赞 2018-05-26 11:08:18
    numpy.reshape(a, newshape, order='C')[source],参数`newshape`是啥意思? 官方文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.htmlnewshape : int or tuple of intsThe new shape ...
  • Python错误:'tuple' object is not callable

    千次阅读 2019-03-16 12:29:07
    什么意思?  简单的说,就是一个对象明明没有这个函数,却作为函数调用。比如说:  data_array = []  print(data_array.shape())  这个时候,大家就会发现,Python真不方便,有什么函数都不知道…… ...
  • 前几天看了些python的代码,发现有些函数的参数前带有(*)号,有的甚至有两个(*)号,它们代表什么意思的? 解释 查阅资料后发现,参数前面加上*号 ,意味着参数的个数不止一个,另外带一个星号(*)参数的函数传入...
  • 前几天看了些python的代码,发现有些函数的参数前带有(*)号,有的甚至有两个(*)号,不清楚它们代表什么意思。 解释 查阅资料后发现,参数前面加上* 号 ,意味着参数的个数不止一个,另外带一个星号(*)参数的...
  • 将numpy.array.tolist()转换为list,然后转换为tuple,然后再输入openCV函数。 转换矩阵cv2.warpAffine()的排列顺序为(X,Y)。 要缩小图像,通常使用cv2.INTER_AREA插值时效果最佳,而放大时 图像时,通常使用cv2....
  • Python--list,tuple,dict,set.

    2017-11-22 16:15:52
    看Python基础,被那几个容器弄得晕乎乎的,对比总结下,以便记忆,可能...(*我一直没弄懂它的有序是什么意思,我之前一直理解错了,以为有序就是按照自然排序的顺序有序,其实这个有序是按照你放入容器中的顺序来排序
  • from autograd.builtins import tuple <p>odeint = primitive(scipy.integrate.odeint) <p><br /> def grad_odeint_all(yt, func, y0, t, func_args, **kwargs):  T,D = np.shape(yt)  flat...
  • 谁能帮我看一下这一段代码什么意思 就两行#号夹起来的那段代码具体解释一下 大概意思能看懂 想知道细节 每一步怎么运作的 因为groupy后的结果他会输出地址而不是数据 我也试过一步一输出 弄不懂 import ...
  • 今天运行python,结果运行处不知道什么意思的代码,请问是什么?报错的话应该怎么修改。代码如下: >>>tuple1 = (1,2,4,8,16,32,64,128,256) >>>list1 = [i for i in tuple1] >>>print(i for i in list1) 输出...
  • 综述迭代器对于原生支持随机访问的数据结构(如tuple、list),迭代器和经典for循环的索引访问相比并无优势,反而丢失了索引值(可以使用内建函数enumerate()找回这个索引值)。但对于无法随机访问的数据结构(比如...
  • 在python中,有时会看到这样的函数定义: def p1(*arg1,**arg2): pass也有看到这样的函数调用: i=5 function(*i)这些都是什么意思呢?1.传入的参数生成 tuple 和 dict def p1(*a1,**a2): print a1,/n,a2 p
  • 在 python 中,*args 和 **kwargs 都代表 1个 或 多个 参数的意思。*args 传入tuple 类型的无名参数,而 **kwargs 传入的参数是 dict 类型。下文举例说明。 1.*args 的用法,以下测试代码: def test(*args): ...
  • get_xlim返回当前Axes视图的x的上下限, get_ylim同. 如: >>>print('xlim:\n',xlim,'\n') >>>print('xlim的类型:\n',type(xlim),'\n') ...class 'tuple'> 引用地址: matplotlib.ax...
  • 一个tuple被完全处理的意思是: 这个tuple以及由这个tuple所导致的所有的tuple都被成功处理。而一个tuple会被认为处理失败了如果这个消息在timeout所指定的时间内没有成功处理。 也就是说对于任何一个spout-tuple...
  • Storm入门与实践(4)Storm的容错机制

    千次阅读 2017-08-24 11:17:37
    转载自:并发编程网 – ifeve.comStorm 能够保证每一个由 Spout ...消息的“完整性处理”是什么意思一个从 spout 中发送出的 tuple 会产生上千个基于它创建的 tuples。例如,有这样一个 word-count 拓扑:TopologyBuil
  • storm保证从spout发出的每个tuple...一个tuple被”完全处理”是什么意思? 就如同蝴蝶效应一样,从spout发射的一个tuple可以引起其它成千上万个tuple因它而产生, 想想那个计算一篇文章中每个单词出现次数的topology.

空空如也

空空如也

1 2 3 4 5 6
收藏数 114
精华内容 45
关键字:

tuple什么意思