新足迹

 找回密码
 注册

精华好帖回顾

· SK 世界流行音乐系列之 赵传 + 我所知道的娱乐圈系列之 那年,那人,那歌 (2008-3-23) steveking · 宝宝睡眠(更新啰嗦了宝贝长牙期睡眠~)欢迎讨论 (2011-5-1) wmai10000
· 上海之美食天地系列 <二> (2005-5-21) Kingfisher · 宝宝趣事 - Jeff回家啦! (2007-9-25) daffodil
Advertisement
Advertisement
楼主:hornsay

[IT] 请教C# 高手之一: 比较多个integer value [复制链接]

发表于 2010-6-2 11:50 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2010-6-1 23:09 发表


绝对不可以,典型初学者做法。




错误。


大老虎来show show 最佳方案。。。
持不同股见者...
Advertisement
Advertisement

发表于 2010-6-2 11:55 |显示全部楼层
此文章由 cdfei 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cdfei 所有!转贴必须注明作者、出处和本声明,并保持内容完整
HashSet<int> b = new HashSet<int>() { 1, 2, 3, 4 };
if (b.Contains(3))
           MessageBox.Show("you got it!");
这个效率应该最高

评分

参与人数 1积分 +3 收起 理由
hornsay + 3 谢谢奉献

查看全部评分

发表于 2010-6-2 12:04 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 hornsay 于 2010-6-2 10:41 发表


所以还是要把一串integer放到list里才能解决这个问题,是不是太麻烦了点?有没有更好的方法?


不麻烦啊,不就是一行语句的事情么?

发表于 2010-6-2 12:04 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 cdfei 于 2010-6-2 10:55 发表
HashSet b = new HashSet() { 1, 2, 3, 4 };
if (b.Contains(3))
           MessageBox.Show("you got it!");
这个效率应该最高


就4个元素,不用HashSet来提高效率了吧。

发表于 2010-6-2 12:05 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 3043638 于 2010-6-2 10:51 发表

难道用其他语言不用存这串integer,而且有多少个integer应该是不确定的。


Delphi 用 in 来解决这个问题, 就好比SQL 语句中也有in,  如 select * from tableA where intfieldA in (1, 3, 5).

我想C#应该有一个非常简捷的方法来解决这个问题,如果没有的话,这会让我很supprise. C#语言的主设计师是来自Borland主架构设计师,我想应该不会用很麻烦的方法来解决这个问题。
持不同股见者...

发表于 2010-6-2 12:08 |显示全部楼层
此文章由 Barcelona 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Barcelona 所有!转贴必须注明作者、出处和本声明,并保持内容完整
俺不懂C#,可从实践经验上讲,这种在代码里面写死了一堆数字来比较的,估计就是做做编程练习,现实中往往是从什么地方输入的数字序列,比如读文件或者用户输入,这样的话你应该是通过某种load功能把数字序列读入到list里的,所以俺很支持10楼的list方案。我猜C#的list应该有类似于push或者add之类的方法吧。
Advertisement
Advertisement

发表于 2010-6-2 12:08 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 cdfei 于 2010-6-2 10:55 发表
HashSet b = new HashSet() { 1, 2, 3, 4 };
if (b.Contains(3))
           MessageBox.Show("you got it!");
这个效率应该最高


遇到这个问题,你基本上是用HashSet 来解决?
持不同股见者...

发表于 2010-6-2 12:13 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 Barcelona 于 2010-6-2 11:08 发表
俺不懂C#,可从实践经验上讲,这种在代码里面写死了一堆数字来比较的,估计就是做做编程练习,现实中往往是从什么地方输入的数字序列,比如读文件或者用户输入,这样的话你应该是通过某种load功能把数字序列读入到li ...


现实肯定不会这样hard coding, 只是想知道C#里有没有用一个keyword就能解决这样的问题,现在看来基本上必须引入一个object, 才能解决这个问题。
持不同股见者...

发表于 2010-6-2 12:25 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 hornsay 于 2010-6-2 11:05 发表


Delphi 用 in 来解决这个问题, 就好比SQL 语句中也有in,  如 select * from tableA where intfieldA in (1, 3, 5).

我想C#应该有一个非常简捷的方法来解决这个问题,如果没有的话,这会让我很supprise. C#语 ...


用List只不过多写一行语句而已,习惯了后不会觉得不方便。

同时在写代码时也不要太关注多写或者少写几句,有更多的东西需要你操心的。

发表于 2010-6-2 12:26 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 hornsay 于 2010-6-2 11:13 发表


现实肯定不会这样hard coding, 只是想知道C#里有没有用一个keyword就能解决这样的问题,现在看来基本上必须引入一个object, 才能解决这个问题。


C#里面的世界里基本全是Object,除了最简单的value type类型之外。

这是所有OO language的特点。

发表于 2010-6-2 12:28 |显示全部楼层
此文章由 cdfei 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cdfei 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你这么喜欢in,就自己写一个吧

  string aa = "1,2,4,5";
             MessageBox.Show(aa.In<int>(3).ToString());   


public static class MyExtensionMothed
    {
        public static bool In<T>(this string strTarget,T s)
        {
            string[] strArray = strTarget.Split(new char[] { ',' });
            return strArray.Contains(s.ToString());
        }
    }
}

评分

参与人数 2积分 +5 收起 理由
hornsay + 3 谢谢奉献
flyspirit + 2 你太有才了

查看全部评分

Advertisement
Advertisement

发表于 2010-6-2 12:32 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 cdfei 于 2010-6-2 11:28 发表
你这么喜欢in,就自己写一个吧

  string aa = "1,2,4,5";
             MessageBox.Show(aa.In(3).ToString());   


public static class MyExtensionMothed
    {
        public static bool In(this s ...


呵呵,很好的办法,自己写extension就可以了。

发表于 2010-6-2 12:35 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 flyspirit 于 2010-6-2 11:25 发表


用List只不过多写一行语句而已,习惯了后不会觉得不方便。

同时在写代码时也不要太关注多写或者少写几句,有更多的东西需要你操心的。


你讲的很对,从Delphi转到C#, 确实有许多不习惯的地方,我想也只能慢慢去适应了。

毕竟C#太强大了,跟着M$走不会没饭吃的吧?
持不同股见者...

发表于 2010-6-2 12:44 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 cdfei 于 2010-6-2 11:28 发表
你这么喜欢in,就自己写一个吧

  string aa = "1,2,4,5";
             MessageBox.Show(aa.In(3).ToString());   


public static class MyExtensionMothed
    {
        public static bool In(this s ...


也谈不上喜欢,只是Delphi中有这样一个keyword而已.
持不同股见者...

发表于 2010-6-2 12:50 |显示全部楼层
此文章由 cdfei 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cdfei 所有!转贴必须注明作者、出处和本声明,并保持内容完整
呵呵,开个玩笑,这些都是些小细节,你熟悉一段时间后就什么都知道了
总的来说,c#的语法是比较简单的

原帖由 hornsay 于 2010-6-2 11:44 发表


也谈不上喜欢,只是Delphi中有这样一个keyword而已.

发表于 2010-6-2 14:23 |显示全部楼层
此文章由 happysee 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 happysee 所有!转贴必须注明作者、出处和本声明,并保持内容完整
PASCAL 语言自带的集合,c里就只有数组。c#是从c变来的,所以语言本身不带集合,要靠库进行扩展。
Advertisement
Advertisement

发表于 2010-6-2 14:31 |显示全部楼层
此文章由 sqfo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 sqfo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Smalltalk

>> _if {3,5,6}.includes?(3) _then "in" _else "out" _endif

发表于 2010-6-2 14:57 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 liedong 于 2010-6-1 19:07 发表
string s ="1,3,5,7";

if(s.contain(Value.ToString()))
{
ShowMessage('You got right number');
}
else
{
ShowMessage('Wrong number');
}


绝对错误的代码

假如这个序列是101,102,103,104,你要比较0,1,2,3,4,都会显示“You got right number”

发表于 2010-6-2 15:02 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 未名湖 于 2010-6-2 00:36 发表

我只学了3周的C#,只会这个,还不知道对不对
using System;
class MaxValue
{
        static void Main()
      
        {
                int x=1,y=3,z=5,w=7;
                int temp;
                if(x<=y)        
                {
                        temp=y;
                    if(temp<=z)  temp=z;
                        if(temp<=w) temp=w;
                }
                else               
                temp=x;
                Console.WriteLine("the max value is {0}",temp);
        }
}


用Math.Max(x,y)就可以了
请参阅http://msdn.microsoft.com/en-us/library/7x97k0y4.aspx

发表于 2010-6-2 15:22 |显示全部楼层

不知记得准不准

此文章由 高寿财 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 高寿财 所有!转贴必须注明作者、出处和本声明,并保持内容完整
#include <stdio.h>
void helloworld(int value)
{
if ((value > 0) && (value < 8) && (value & 1)) sprintf(s, "%", "You got right number");
else sprintf(s, "%", "Wrong number");
}

发表于 2010-6-2 15:25 |显示全部楼层

回复 54# 的帖子

此文章由 Barcelona 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Barcelona 所有!转贴必须注明作者、出处和本声明,并保持内容完整
都是s惹的祸
Advertisement
Advertisement

发表于 2010-6-2 15:32 |显示全部楼层

回复 54# 的帖子

此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
不能用这个方法, 如果integer 是 1,4, 101, 231, 1000。。。, 你没法找到有规律的pattern.

发表于 2010-6-2 17:47 |显示全部楼层
此文章由 HappyRain 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 HappyRain 所有!转贴必须注明作者、出处和本声明,并保持内容完整
10楼jerryclark的方法已经很简洁了。如果你喜欢代码行少一点,看起来像DELPHI代码的书写方式。还可以把数据声明放在条件判断里面。除了用List<T>以外,还可以用数组。

  if (new List<int> { 1, 3, 5, 7 }.Contains(nVal))
      MessageBox.Show("You got right number");
  else
      MessageBox.Show("Wrong number");

  if (new int[] { 1, 3, 5, 7 }.Contains(nVal))
      MessageBox.Show("You got right number");
  else
      MessageBox.Show("Wrong number");

如果你喜欢类似SQL的查询语法,还可以用C# 的LINQ方法,条件判断如下:
bool bFound = (from num in new int[] { 1, 3, 5, 7 } select num).Contains(nVal);

其实以上几种写法,都用到了C#中的LINQ,如果你要调试,别忘了加上 using System.Linq;

评分

参与人数 2积分 +5 收起 理由
cdfei + 2 谢谢奉献
hornsay + 3 感谢分享

查看全部评分

发表于 2010-6-2 18:38 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 HappyRain 于 2010-6-2 16:47 发表
10楼jerryclark的方法已经很简洁了。如果你喜欢代码行少一点,看起来像DELPHI代码的书写方式。还可以把数据声明放在条件判断里面。除了用List以外,还可以用数组。

  if (new List { 1, 3, 5, 7 }.Contains(nVal) ...

太棒了,这些基本的用法正是我要学的。。。
持不同股见者...

发表于 2010-6-2 20:35 |显示全部楼层
此文章由 dotnet 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dotnet 所有!转贴必须注明作者、出处和本声明,并保持内容完整
using System;
using System.Linq;
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 10;
            Console.WriteLine(new[] {1, 3, 5, 7}.Count(c => c == x) > 0 ? "you got the right number" : "Wrong number");
            Console.ReadLine();
        }
    }
}

find more on 101 LINQ Samples

评分

参与人数 2积分 +5 收起 理由
hornsay + 3 感谢分享
cdfei + 2 感谢分享

查看全部评分

发表于 2010-6-2 20:37 |显示全部楼层

回复 59# 的帖子

此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
感谢分享,白条先。
Advertisement
Advertisement

发表于 2010-6-2 21:38 |显示全部楼层
此文章由 helloall 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 helloall 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 hornsay 于 2010-6-2 11:35 发表


你讲的很对,从Delphi转到C#, 确实有许多不习惯的地方,我想也只能慢慢去适应了。

毕竟C#太强大了,跟着M$走不会没饭吃的吧?


看样子也要转行了啊!
Rhodesian

发表于 2010-6-2 21:43 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 helloall 于 2010-6-2 20:38 发表


看样子也要转行了啊!


这是必然趋势,我觉得你有机会也可以在单位里做点小项目, 如 web application, portable device application。 我是让我的老板去买了Visual Studio 2005, 现在让他去买 2010版本。 然后再让他买了一下C#的书。

评分

参与人数 1积分 +3 收起 理由
helloall + 3 谢谢奉献

查看全部评分

持不同股见者...

发表于 2010-6-2 21:53 |显示全部楼层
此文章由 helloall 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 helloall 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 hornsay 于 2010-6-2 20:43 发表


这是必然趋势,我觉得你有机会也可以在单位里做点小项目, 如 web application, portable device application。 我是让我的老板去买了Visual Studio 2005, 现在让他去买 2010版本。 然后再让他买了一下C#的书。


谢谢建议。
Rhodesian

发表于 2010-6-2 21:57 |显示全部楼层
此文章由 helloall 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 helloall 所有!转贴必须注明作者、出处和本声明,并保持内容完整
说到这里,发个不着边的牢骚,墨尔本用DB2的好像也非常少,尤其在小机和windows上,为什么IBM就不能像微软一样好好对待中小企业客户呢。

发表回复

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

本版积分规则

Advertisement
Advertisement
返回顶部