小编cey*_*yko的帖子

是否可以在C#中使用分支预测提示?

例如,我知道它是为gcc定义的,并在Linux内核中用作:

#define likely(x)       __builtin_expect((x),1)
#define unlikely(x)     __builtin_expect((x),0)
Run Code Online (Sandbox Code Playgroud)

如果在C#中没有这样的东西是可能的,那么手动重新排序if语句是最好的选择,把最可能的情况放在第一位吗?有没有其他方法可以根据这种类型的外部知识进行优化?

在相关的说明中,CLR知道如何识别保护条款并假设将采用备用分支,这使得这种优化不适合用于保护条款,是否正确?

(请注意,我意识到这可能是微观优化;我只对学术目的感兴趣.)

.net c# clr optimization

18
推荐指数
1
解决办法
3821
查看次数

在一个模式中多次使用相同的变量

我希望能够在一个模式中多次使用单个变量,这样只有在所有地方都存在相同的值时它才会匹配,例如

list match {
  case x :: x :: xs => // recurse
}
Run Code Online (Sandbox Code Playgroud)

哪个匹配List(1,1,2)但不匹配List(1,2,1).但这不能编译error: x is already defined as value x.

在研究这个问题时,我发现我还可以在案例条款中加入一名警卫,所以我可以这样做

list match {
  case x1 :: x2 :: xs if x1==x2 => // recurse
}
Run Code Online (Sandbox Code Playgroud)

它似乎以相同的方式工作(它确实,对吧?).这很好,但是如果我想在很多地方使用相同的值,那就不会那么干净了

list match {
  case x1::x2::x3::x4::xs if x1==x2 && x2==x3 && x3==x4 => // recurse
}
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式我能做到这一点?


一些注意事项:是的,我只是在学习scala,如果不清楚的话,我不确定这是我真正想做的事情,但我只是对可能的事情感兴趣.在这方面,我真的不想找一个完全不同的解决方案,像takeWhilefilter什么的,但更多的是模式匹配中特别感兴趣.

scala pattern-matching

6
推荐指数
2
解决办法
572
查看次数

argv [0]如何运作

我知道这argv[0]代表了可执行文件名,但我不明白它是如何实现的 - 它如何在源代码级别获取文件名和选项.起初我以为它依赖于linux中的内置函数,但后来发现windows也支持它,让我相信它可能是由编译器完成的?

c command-line-arguments

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

将4位数年份转换为2位数年份

我想得到一年的最后2位数.例如,如果我以输入值"2012"开始,我想生成输出值"12".

它们是否可以选择fprintf仅打印最后两位数字?

c

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

Scala条件求和的元组在过滤的元组列表中

我是Scala的新手,需要一些关于如何在元组列表中组合过滤器和求和的帮助.

我需要的是过滤元组列表的整数之和,它基本上是问题的答案:

所有设定权重的总和是多少?

对于下面的样本列表,结果应为20

这个清单很简单:

     val ln = List( ("durationWeight" , true, 10),
                    ("seasonWeight"   , true, 10),
                    ("regionWeight"   , false, 5),
                     ("otherWeight"   , false, 5)
Run Code Online (Sandbox Code Playgroud)

根据布尔标志过滤列表很简单:

     val filtered = ln.filter { case(name, check, value) => check == true  }
Run Code Online (Sandbox Code Playgroud)

它返回了我想要的元组.获得所有它们的总和似乎与地图后跟sum:

  val b = filtered.map{case((name, check, value) ) => value}.sum
Run Code Online (Sandbox Code Playgroud)

这将返回所有设定权重的所需总和.

但是,我如何在一步中结合滤镜,地图和总和来完成所有这一切,理想情况下是优雅的一个班轮?

谢谢你的帮助.

scala sum list filter

0
推荐指数
1
解决办法
2012
查看次数

是否将按值传递的结构推入堆栈?

c/c ++编译器是否按值将结构推送到堆栈上,如果程序员指定了一个大型结构,则将数百个字节存储到堆栈中?返回的结构是否会受到同样的惩罚?

c c++ compiler-construction

0
推荐指数
1
解决办法
190
查看次数