新足迹

 找回密码
 注册

精华好帖回顾

· Prime Picks(2)-- Misery (by Stephen King) (2008-7-25) 孔武 · 2013遛弯拍照回顾(多图) (2014-1-5) zzoz
· 【AK小食堂】之晚餐(四) ~新鲜的食材那是极好的&新入的那些碗, 碟 (多图慎入), 做法添加中~ (2013-6-25) Agamemnon · vivid sydney不是只有歌劇院.....!! (2011-6-11) jmms_smmj
Advertisement
Advertisement
查看: 1691|回复: 22

Tuple class, 有意思 [复制链接]

头像被屏蔽

禁止访问

发表于 2011-7-25 17:47 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我这么用,你看行吗?

    class Program
    {

        public static void Main(string[] args)
        {
            int x = 0;
            int y = 0;

            Tuple<bool, string, string> result = DoSomeCalculation(x, y);
            Console.WriteLine("Result:{0} , return:{1}, errormsg:{2}", result.Item1, result.Item2, result.Item3);
            Console.ReadLine();
        }

        private static Tuple<bool, string, string> DoSomeCalculation(int x, int y)
        {
            try
            {
                double result = x / y;
                return new Tuple<bool, string, string>(true, result.ToString(), null);
            }
            catch(Exception ex)
            {
                return new Tuple<bool, string, string>(false, null, ex.Message);
            }
            
        }        
    }
Advertisement
Advertisement

发表于 2011-7-26 14:28 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Tuple一般是用来做多维的key的。

如果你想要一个method返回多个值,直接用out keyword。这样就不需要生成一个新的object。

private static void DoSomeCalculation(int x, int y, out bool A, out string B, out string C )
        {
            try
            {
                double result = x / y;
                A= true;
                B = result.ToString();
                C =null;
              
            }
            catch(Exception ex)
            {
                  A= false;
                B = null;
                C =ex.Message;
            }
            
        }

[ 本帖最后由 jerryclark 于 2011-7-26 13:31 编辑 ]
头像被屏蔽

禁止访问

发表于 2011-7-26 14:34 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 jerryclark 于 2011-7-26 13:28 发表
Tuple一般是用来做多维的key的。

如果你想要一个method返回多个值,直接用out keyword。这样就不需要生成一个新的object。

private static void DoSomeCalculation(int x, int y, out bool A, out string B, out st ...


我看文章说 Tuple 的好处就是不需要用 out 了。

发表于 2011-7-26 14:42 |显示全部楼层
此文章由 mingyali 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 mingyali 所有!转贴必须注明作者、出处和本声明,并保持内容完整
JAVA现在的趋势就是增加语言的动态能力,实现动态语言的某些特性,自己毫无创新。估计离死确实不远了。

2012年度奖章获得者 2011年度奖章获得者

发表于 2011-7-26 14:54 |显示全部楼层

回复 atransformer 1# 帖子

此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
为啥上了就除以0,非要搞个exception?

发表于 2011-7-26 14:55 |显示全部楼层
此文章由 yuba 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yuba 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 mingyali 于 2011-7-26 13:42 发表
JAVA现在的趋势就是增加语言的动态能力,实现动态语言的某些特性,自己毫无创新。估计离死确实不远了。


说的倒是不错,但是为啥在这个帖子里感慨Java的未来啊?!
Advertisement
Advertisement
头像被屏蔽

禁止访问

发表于 2011-7-26 15:00 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 交易人生 于 2011-7-26 13:54 发表
为啥上了就除以0,非要搞个exception?


我的意思是一个method, 返回一个 tuple, 第一个值是method是否成功。第二个是返回值,第三个是error message值(in case method fails)

2012年度奖章获得者 2011年度奖章获得者

发表于 2011-7-26 15:14 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 atransformer 于 2011-7-26 14:00 发表


我的意思是一个method, 返回一个 tuple, 第一个值是method是否成功。第二个是返回值,第三个是error message值(in case method fails)

这么做是可以的,我的意思你的x/y,而y=0,所以这个method一调用就除0,有exception。
其实没必要每个method都要有exception handling,最好让它跑到top level,除非不得已。
0  to 1
头像被屏蔽

禁止访问

发表于 2011-7-26 15:17 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 交易人生 于 2011-7-26 14:14 发表

这么做是可以的,我的意思你的x/y,而y=0,所以这个method一调用就除0,有exception。
其实没必要每个method都要有exception handling,最好让它跑到top level,除非不得已。


你是说尽量少用 try catch?

2012年度奖章获得者 2011年度奖章获得者

发表于 2011-7-26 15:22 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 atransformer 于 2011-7-26 14:17 发表


你是说尽量少用 try catch?

嗯,除了不得已,除了当时就要做处理,不然的话,要throw更好层去,因为这样,会保留完整的stack trace

[ 本帖最后由 交易人生 于 2011-7-26 14:26 编辑 ]
0  to 1
头像被屏蔽

禁止访问

发表于 2011-7-26 15:28 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 交易人生 于 2011-7-26 14:22 发表

嗯,除了不得已,除了当时就要做处理,不然的话,要throw更高层去,因为这样,会保留完整的strack trace


谢大师教诲。
Advertisement
Advertisement

2010年度奖章获得者

发表于 2011-7-26 16:16 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Someclass<T, R, S>
Someclass<T, Dictionary<R, S>>

自古就有的。

一般不建议用匿名,读起来要按次序,不好。

Result<T> 很常用啊。 T为任何custom class
头像被屏蔽

禁止访问

发表于 2011-7-26 16:24 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-7-26 15:16 发表
Someclass
Someclass

自古就有的。

一般不建议用匿名,读起来要按次序,不好。

Result 很常用啊。 T为任何custom class


我一直都是这么用。 这不过出了这个tuple,不知道干啥用的

2010年度奖章获得者

发表于 2011-7-26 16:28 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
那些怪名词不用理会。 前一阵看到 Functor ,一看在知道是每天在用的东西

发表于 2011-7-26 16:34 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 atransformer 于 2011-7-26 15:24 发表


我一直都是这么用。 这不过出了这个tuple,不知道干啥用的

做Key用。
比如说: 有一群学生,每个人都有一个年级,班级,学号(每个班级的学号都是从1开始的)比如:张三是2年级2班学号12,李四是1年级5班40号。
如果要建立一个Hashtable或者Dictionary的话,定义Key很麻烦,照以前就要写专门的class,还要implement ICompareable。
现在只要写 Dictionary<Tuple<int,int,int>, Student> 就行了

原先要写Dictionary<int, Dictionary<int, Dictionary<int, Student>>>

[ 本帖最后由 jerryclark 于 2011-7-26 15:59 编辑 ]

发表于 2011-7-26 16:43 |显示全部楼层

回复 dalaohu 12# 帖子

此文章由 cdfei 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cdfei 所有!转贴必须注明作者、出处和本声明,并保持内容完整
什么自古就有?以前如果传递2个值的参数或返回值就用KeyValuePair或者list<KeyValuePair<>>,但如果是三个值或者四个值的,就需要你自己定义类或者结构,这个tuple就是干这个的,相当方便啊。
Advertisement
Advertisement

2010年度奖章获得者

发表于 2011-7-26 16:45 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
3.0的,算古代的了

发表于 2011-7-26 17:06 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
可怜我现在还在用2.0。。。。。
头像被屏蔽

禁止访问

发表于 2011-7-26 17:42 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 jerryclark 于 2011-7-26 15:34 发表

做Key用。
比如说: 有一群学生,每个人都有一个年级,班级,学号(每个班级的学号都是从1开始的)比如:张三是2年级2班学号12,李四是1年级5班40号。
如果要建立一个Hashtable或者Dictionary的话,定义Key很麻烦,照以前就要写专门的cl ...


没明白, 用 Dictionary<StudentKey,Student> 不就完了?

2012年度奖章获得者 2011年度奖章获得者

发表于 2011-7-26 18:11 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 atransformer 于 2011-7-26 16:42 发表


没明白, 用 Dictionary 不就完了?

如果有群学生,要找到他们父母;
0  to 1

发表于 2011-7-26 20:16 |显示全部楼层
此文章由 飞翔翼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 飞翔翼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我看boost中介绍Tuple可以减少很多小的STRUCT定义,还以为只有C++里面有
Advertisement
Advertisement
头像被屏蔽

禁止访问

发表于 2011-7-26 20:58 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 交易人生 于 2011-7-26 17:11 发表

如果有群学生,要找到他们父母;


还是没明白

2012年度奖章获得者 2011年度奖章获得者

发表于 2011-7-27 11:04 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 atransformer 于 2011-7-26 19:58 发表


还是没明白

这个例子可能不太合适,比如幼儿园数据库,2个table,kids和parents,parents有kidid link到 kids table,一个孩子有夫母,这个用Tuple<kid, parent, parent>比较合适。Tuple就像临时搞个struct,而不用事先定义,比较灵活,方便。

评分

参与人数 1积分 +3 收起 理由
atransformer + 3 我就装懂

查看全部评分

0  to 1

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部