给定项目集合,如何根据谓词将集合拆分为2个子集合?
您可以进行2次搜索,但运行时间为2*N(虽然仍为O(n),但需要两倍的时间,显然不是首选)
IEnumerable<int> even = nums.Where(i => IsEven(i));
IEnumerable<int> odd = nums.Where(i => !IsEven(i));
Run Code Online (Sandbox Code Playgroud)
你可以自己做一个线性传递(在这里重构为扩展方法),但这意味着你必须全部拖动这些代码,而更多的自定义代码使得事情的可维护性降低.
public static void SplitOnPred<T>(
this IEnumerable<T> collection,
Func<T, bool> pred,
out IEnumerable<T> trueSet,
out IEnumerable<T> falseSet
) {
List<T> trueSetList = new List<T>();
List<T> falseSetList = new List<T>();
foreach( T item in collection ) {
if( pred( item ) ) {
trueSetList.Add( item );
} else {
falseSetList.Add( item );
}
}
trueSet = trueSetList;
falseSet = falseSetList;
}
Run Code Online (Sandbox Code Playgroud)
问题: LINQ是否有任何原生支持在1个线性传递中拆分集合?
我试图通过跨多个线程的请求命中它来对网站进行性能测试.每个线程执行n次.(在for循环中)
但是,我遇到了问题.特别是WebException("无法连接到远程服务器")与内部异常:
无法执行套接字上的操作,因为系统缺少足够的缓冲区空间或者队列已满,因此127.0.0.1:52395
我试图在每个线程500次迭代时运行100个线程.
最初我HttpWebRequest在System.Net 中使用来向服务器发出GET请求.目前我正在使用,WebClient因为我假设每次迭代使用一个新的套接字(所以在短时间内100*500套接字).我假设WebClient(每个线程实例化一次)只会使用一个套接字.
我不需要一次打开50 000个套接字,因为我想发送GET请求,接收响应并关闭套接字,释放它以便在下一个循环迭代中使用.我明白这将是一个问题
但是,即使使用WebClient,也会请求一堆套接字,从而在TIME_WAIT模式下产生一堆套接字(使用netstat检查).这会导致其他应用程序(如Internet浏览器)挂起并停止运行.
我可以用更少的迭代和/或更少的线程来操作我的测试,因为看起来套接字最终会退出这个TIME_WAIT状态.但是,这不是一个解决方案,因为它没有充分测试Web服务器的功能.
题:
在每次线程迭代后如何显式关闭套接字(从客户端)以防止TIME_WAIT状态和套接字耗尽?
码:
包装HttpRequest的类
编辑:在使用中包装WebClient,因此为每次迭代实例化,使用和处理新的WebClient.问题仍然存在.
public sealed class HttpGetTest : ITest {
private readonly string m_url;
public HttpGetTest( string url ) {
m_url = url;
}
void ITest.Execute() {
using (WebClient webClient = new WebClient()){
using( Stream stream = webClient.OpenRead( m_url ) ) {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的ThreadWrapperClass创建一个新线程的部分:
public void Execute() {
Action Hammer = () => {
for( int …Run Code Online (Sandbox Code Playgroud) 我有一个类(我无法修改)简化到这个:
public class Foo<T> {
public static string MyProperty {
get {return "Method: " + typeof( T ).ToString(); }
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道当我只有一个时,如何调用这个方法 System.Type
即
Type myType = typeof( string );
string myProp = ???;
Console.WriteLinte( myMethodResult );
Run Code Online (Sandbox Code Playgroud)
我试过的:
我知道如何用反射实例化泛型类:
Type myGenericClass = typeof(Foo<>).MakeGenericType(
new Type[] { typeof(string) }
);
object o = Activator.CreateInstance( myGenericClass );
Run Code Online (Sandbox Code Playgroud)
但是,由于我使用静态属性,这是否适合实例化一个类?如果我无法编译时间,我如何获得对该方法的访问权限?(System.Object没有定义static MyProperty)
编辑 我发布后意识到,我正在使用的类是属性,而不是方法.我为这种困惑道歉
我有一个具有此签名的简单数据类:
internal interface IMyClass {
string Letter { get; }
int Number { get; }
}
Run Code Online (Sandbox Code Playgroud)
我希望能够根据字段(指定为string sortField)和方向(指定为bool isAscending)对此数据进行排序
目前我使用的是switch(在每种情况下都有升序逻辑if)
IEnumerable<IMyClass> lst = new IMyClass[];//provided as paramater
switch (sortField)
{
case "letter":
if( isAscending ) {
lst = lst.OrderBy( s => s.Letter );
} else {
lst = lst.OrderByDescending( s => s.Letter );
}
break;
case "number":
if( isAscending ) {
lst = lst.OrderBy( s => s.Number );
} else {
lst …Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序中添加一个"最近打开"的功能,并想知道是否有一个简单的内置方法来做"溢出"的列表.我的意思是,当你添加超出列表容量的元素时,所有项都会被移位.
所需功能的代码示例(显然不是这样,列表实际上包含A,B,C):
List<string> list = new List<string>();
//if Overflow was 2
list.Add("A");
list.Add("B");
//List now contains A,B
list.Add("C");
//List now contains B,C
Run Code Online (Sandbox Code Playgroud)
对不起这个简单的问题.问题本身是显而易见的(入口计划是从List继承),我只是不喜欢重新发明轮子,并在语言或框架具有该功能时将未来的程序员与自定义对象混淆.
我一直在研究一个扩展的简单java注释处理器AbstractProcessor.
我已经能够成功地使用它进行测试 javac -Processor MyProcessor mySource.java
问题是将它集成到使用Android Studio的简单Hello World Android应用程序中.
我开始创建一个新的Android项目,然后添加一个单独的模块,我放置所有的注释处理器代码(MyProcessor类以及它使用的自定义注释).
然后我将这个新模块添加为HelloWorld android项目的依赖项.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':MyProcessorModule')
}
Run Code Online (Sandbox Code Playgroud)
然后,如何使用处理器根据HelloWorld应用程序中的所有源文件生成代码?
我觉得这应该是显而易见的,也许我完全错过了一些东西,但是如何点击摘要中的 URL ?
下面是我正在谈论的截图示例.(显然在这种情况下,因为它是一个警告,我可以从错误列表窗口复制警告,将其粘贴到文本编辑器,提取网址,然后使用我的浏览器.在其他情况下,我将不得不打印屏幕,然后手动重新输入网址.无论哪种方式,这两种方法都很耗时)

"其他情况"是从其他二进制文件查看摘要的结果,其中开发人员使用摘要标记即
/// <summary>
/// Visit http://www.google.com for more info
/// </summary>
static void foo()
{
}
Run Code Online (Sandbox Code Playgroud)
我无法将鼠标悬停在摘要框上以单击链接而不会消失.
编辑 我没有抓住我不能使用外部浏览器,我无法从摘要框中单击链接(或轻松复制).一定有更好的方法
我是 MSBuild 的初学者。到目前为止,我已经能够创建一个名为“MakeTextFile”的自定义任务,它根据您传递的内容属性在 C:\ 中创建一个文本文件。这可以从命令行提示符运行。
我也将它包含在我的 .targets 文件中(在项目标签下):
<ItemGroup>
<AvailableItemName Include="CreateTextFileAction" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
当我在客户端应用程序 .csproj 上使用 Import 标记时,我现在可以将项目构建操作设置为“CreateTextFileAction”,但是该操作永远不会触发(因为 C:\ 上没有创建任何文本文件)
如何获取用我的构建操作“CreateTextFileAction”标记的项目的所有文件路径并将它们传递给我的自定义任务?
作为参考,我的 .targets 文件:
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<AvailableItemName Include="CreateTextFileAction" />
</ItemGroup>
<UsingTask AssemblyFile="CustomMSBuildTask.dll" TaskName="CustomMSBuildTask.MakeTextFile" />
<Target Name="MyTarget">
<MakeTextFile Contents="TODO HOW DO I GRAB MARKED FILES?" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud) 考虑以下 CPU 指令,该指令获取地址 16777386(十进制)处的内存并将其存储在寄存器 1 中:
Move &0x010000AA, R1
传统上,程序在编译时被翻译为汇编(机器代码)。(让我们忽略更复杂的现代系统,例如抖动)。
但是,如果这个地址分配是在编译时静态完成的,操作系统如何确保两个进程不使用相同的内存?(例如,如果您同时运行相同的编译程序两次)。
问题:
程序如何以及何时分配其内存地址?
虚拟内存:
我了解大多数(如果不是全部)现代系统在硬件中使用内存管理单元来允许使用虚拟内存。地址空间的前几个八位字节用于引用哪个页面。如果每个进程使用不同的页面,这将允许内存保护。但是,如果这就是执行内存保护的方式,那么最初的问题仍然存在,只是这次如何分配页号?
编辑:
中央处理器:
一种可能性是 CPU 可以通过强制操作系统在执行基于内存的指令之前分配进程 ID 来处理内存保护。然而,这只是猜测,需要 CPU 架构的硬件支持,我不确定 RISC ISA 的设计目的是什么。
使用时,array.each您可以以两种形式指定功能:
大括号:
a = [1,2,3]
a.each { |x| puts x * x }
Run Code Online (Sandbox Code Playgroud)
输出:
1
4
9
=> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
'do'语法:
a = [1,2,3]
a.each do |x|
puts (x * x)
end
Run Code Online (Sandbox Code Playgroud)
输出:
1
4
9
=> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
问题: 如何使用自己的自定义函数复制'do'语法样式?最接近我可以得到的大括号样式是:
我尝试过的:
def PutWith2Arg(proc)
puts proc.call(2)
end
PutWith2Arg(Proc.new { |x| x + 100 })
Run Code Online (Sandbox Code Playgroud)
输出:
102
=> nil
Run Code Online (Sandbox Code Playgroud) 精简版
我是一个初学者计划,我在启动程序方面的经验基本上是视觉工作室的f5.如何在Windows 2k3服务器上部署ASP.NET MVC应用程序?部署后,我将如何访问/运行该站点?
长版:
我试图在我公司的win 2k3服务器上启动一个简单的ASP.NET MVC应用程序.我已经在我的项目中包含了二进制文件(用于MVC体系结构,System.Web.Mvc等),因为我不确定是否安装了用于ASP.NET 3.5的sp1.
我完全没有服务器部署的经验,除了在我的localhost上部署一个简单的ASP经典站点之外,到目前为止我一直在使用开发服务器进行编码.
这个过程是什么?当我从Visual Studio单击发布时,我选择磁盘路径并将其放在我的桌面上,然后将该文件夹传输到我想要的服务器目录.该目录目前适用于经典ASP页面,因此我将我的mvc应用程序放在该目录中的一个文件夹中.
我如何访问我的网站?我试过\ server\directory\MyMVCAppFolder\Home和几个版本.(我改变了我在Global.asax中的路由来解释.aspx扩展,这是一个与win 2k3的IIS6相关的nessecary evil)
总之,如何部署一个只访问我希望发布它的服务器目录的ASP.NET MVC站点,以及如何作为最终用户访问它?
我正在使用C++创建一个可以从VBA代码中使用的简单DLL.但是,虽然它可以在我的开发计算机上工作,但在尝试访问不同计算机上的DLL时,VBA会声明找不到DLL文件,尽管该路径有硬编码.
我的DLL看起来像这样(使用Visual C++ 2010 Express作为Win32 DLL项目创建):
DEF文件:
LIBRARY "squareNumber"
EXPORTS
squareNumber
Run Code Online (Sandbox Code Playgroud)
Function.cpp:
double __stdcall squareNumber(double & x)
{
return x*x;
}
Run Code Online (Sandbox Code Playgroud)
VBA代码如下所示:
Public Declare Function squareNumber Lib "C:\MySimpleDLL.dll" (ByRef number As Double) As Double
Sub test()
MsgBox squareNumber(2)
End Sub
Run Code Online (Sandbox Code Playgroud)
我是C++ DLL的新手,我编写的DLL是错误的,还是VBA的问题?
使用RegSvr32还会产生"模块[dllpath]无法加载.确保二进制文件存储在指定的路径或调试它以检查二进制文件或从属.DLL文件的问题."
我在理解此特定声明时遇到了麻烦:
void (*signal(int, void (*fp)(int)))(int);
我以前对函数指针的理解是,方括号中的第一项是函数指针的名称。
例如
int (*MySuperDuperNameForASimpleAddFunction)(int, int);
我不明白除了第一个括号中的标识符外,还有什么可能。