小编J F*_*J F的帖子

更快的方式来做List <T> .Contains()

我正在尝试做我认为是"去交叉"(我不确定这个名称是什么,但这就是EpicGames的Tim Sweeney在旧的UnrealEd中所称的)

// foo and bar have some identical elements (given a case-insensitive match)
List‹string› foo = GetFoo();
List‹string› bar = GetBar();

// remove non matches
foo = foo.Where(x => bar.Contains(x, StringComparer.InvariantCultureIgnoreCase)).ToList();
bar = bar.Where(x => foo.Contains(x, StringComparer.InvariantCultureIgnoreCase)).ToList();
Run Code Online (Sandbox Code Playgroud)

然后,我做另一件事,我从原件中减去结果,看看我删除了哪些元素.使用.Except()非常快,所以没有麻烦.

必须有一种更快的方法来执行此操作,因为这个方法非常糟糕,在列表中有大约30,000个元素(字符串).优选地,执行该步骤的方法以及稍后一次执行的方法将是很好的.我尝试使用.Exists()而不是.Contains(),但它稍慢.我感觉有点厚,但我认为应该可以使用.Except()和.Intersect()和/或.Union()的某种组合.

c# extension-methods contains list

7
推荐指数
2
解决办法
6875
查看次数

在三元语句中没有隐式int - > short转换

short s;
s = (EitherTrueOrFalse()) ? 0 : 1;
Run Code Online (Sandbox Code Playgroud)

这失败了:

错误CS0266:无法将类型'int'隐式转换为'short'.存在显式转换(您是否错过了演员?)

任何人都可以解释为什么会这样吗?我能想到的唯一一件事就是编译器没有查看第二个值并且不知道两者之间的范围,在我编写类似的情况下

short s;
s = (EitherTrueOrFalse()) ? 0 : 65000;
Run Code Online (Sandbox Code Playgroud)

正确?唯一的解决方案是丑陋的演员?

此外,似乎C#没有短类型的类型后缀.这是一个非常严重的监督IMO.否则,这将是一个解决方案......

c# ternary-operator implicit-cast

5
推荐指数
1
解决办法
1430
查看次数

hg grep --exclude模式

使用时如何指定--exclude/ -X参数hg grep

我已经尝试了我遇到的各种裸露和模式语法(包括我知道的一些正则表达式方法),但我甚至无法使用最简单的例子.

我最感兴趣的是*.min.js从搜索中过滤掉一些二进制文件和缩小的JavaScript文件().

我在Windows上,如果这是相关的.

mercurial grep

3
推荐指数
1
解决办法
2275
查看次数